我已经开始为旧的基于Z80的机器开发SMB服务器。这台机器运行一个非常简单的,类似MS-DOS的操作系统(没有多任务,没有用户的概念,只有FAT文件系统,没有unicode,只有8.3文件名)并且内存有限,因此我的第一个想法就是只实现SMB核心协议。我将使用TCP传输。
就目前而言,我只有一个非常短的测试代码,它只回复SMB_COM_NEGOTIATE命令,表明核心协议(“PC NETWORK PROGRAM 1.0”)是所需的方言。为了测试它,我尝试通过打开资源管理器窗口并在地址栏中输入"\\<server IP>"
来连接Windows 7计算机。我已经与Wireshark验证了服务器收到negotiate命令并发送(显然)正确的响应。
问题:一旦Windows客户端收到响应,就会显示通用的“无法访问资源”错误消息(错误代码为0x80004005),然后没有任何反应(没有进一步的SMB)消息被发送)。我当时希望收到SMB_COM_TREE_CONNECT或类似的命令。
我在想,也许Windows 7不支持核心协议(它很老,而且它没有任何安全功能),但是,为什么它会在协商请求中列出核心方言名称?也许我错过了一些步骤?服务器必须在协商响应后发送任何其他数据包吗?
客户端操作系统是Windows 7 Ultimate 64位,以下是请求和响应的Wireshark转储,以防任何人在此过程中发现任何错误:
请求:
回应:
UPDATE:如果我选择NT LM 0.12方言而不是核心方言,我会从客户端收到SESSION_SETUP_AND_REQUESTX命令。显然,似乎确实,Windows 7不支持核心协议。无论如何,任何额外的信息都将受到赞赏。
答案 0 :(得分:4)
我相信Windows 7确实支持核心协议。根据{{3}}连接到旧服务器时,它会降级到SMB 1.0。
基于Windows 7连接Samba服务器时遇到的问题,我认为指定核心协议的问题是由于Windows 7计算机上的LANMAN工作站/客户端设置。
建议的更改
Network security: LAN Manager authentication level Send LM & NTLM responses
【HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa \【LmCompatibilityLevel 】
值更改为0
在注册表中将以下参数添加到LanmanWorkStation和NetLogon
HKLM\System\CCS\Services\LanmanWorkstation\Parameters
DWORD DomainCompatibilityMode = 1
DWORD DNSNameResolutionRequired = 0
HKLM\System\CCS\Services\Netlogon\Parameters
DWORD RequireSignOnSeal = 0
DWORD RequireStrongKey = 0
这些更改应确保LanmanWorkstation不使用NTLMv2会话安全性。
答案 1 :(得分:2)
此信息与@ Appleman1234提供的信息基本相同(谢谢!),更容易申请。
.bat
文件中,它将向您的C:
驱动器导出我们准备修改的3个reg键。reg export HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa HKEY_LOCAL_MACHINE.SYSTEM.CurrentControlSet.Control.Lsa.reg reg export HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\LanmanWorkstation\Parameters HKEY_LOCAL_MACHINE.SYSTEM.CurrentControlSet.services.LanmanWorkstation.Parameters.reg reg export HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Netlogon\Parameters HKEY_LOCAL_MACHINE.SYSTEM.CurrentControlSet.services.Netlogon.Parameters.reg
.reg
文件并将其导入注册表。Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa] "lmcompatibilitylevel"=dword:00000000 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\LanmanWorkstation\Parameters] "EnablePlainTextPassword"=dword:00000001 "EnableSecuritySignature"=dword:00000000 "RequireSecuritySignature"=dword:00000000 "DomainCompatibilityMode"=dword:00000001 "DNSNameResolutionRequired"=dword:00000000 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Netlogon\Parameters] "RequireSignOrSeal"=dword:00000000 "RequireStrongKey"=dword:00000000 "RequireSignOnSeal"=dword:00000000