Windows 7是否真的支持SMB核心协议?

Kon*_*man 10 smb windows-7

我已经开始为旧的基于Z80的机器开发SMB服务器.这台机器运行一个非常简单的,类似MS-DOS的操作系统(没有多任务,没有用户的概念,只有FAT文件系统,没有unicode,只有8.3文件名)并且内存有限,因此我的第一个想法就是只实现SMB核心协议.我将使用TCP传输.

至于现在,我只有一个非常短的测试代码,只是回复SMB_COM_NEGOTIATE命令,表明核心协议("PC NETWORK PROGRAM 1.0")是所需的方言.为了测试它,我尝试通过打开资源管理器窗口并输入"\\<server IP>"地址栏从Windows 7计算机连接.我已经与Wireshark验证了服务器收到协商命令并发送(显然)正确的响应.

问题:一旦Windows客户端收到响应,它就会显示一个通用的"无法访问资源"错误消息(错误代码为0x80004005),然后没有任何反应(不再发送SMB消息).我期待收到SMB_COM_TREE_CONNECT或类似的命令.

我在想,也许Windows 7不支持核心协议(它很老,而且它没有任何安全功能),但是,为什么它会在协商请求中列出核心方言名称?也许我错过了一些步骤?服务器必须在协商响应后发送任何其他数据包吗?

客户端操作系统是Windows 7 Ultimate 64位,以下是请求和响应的Wireshark转储,以防任何人在此过程中发现任何错误:

请求:

SMB方言协商请求

响应:

SMB方言协商回应

更新:如果我选择NT LM 0.12方言而不是核心方言,我会从客户端收到一个SESSION_SETUP_AND_REQUESTX命令.显然,似乎确实,Windows 7不支持核心协议.无论如何,任何额外的信息都将受到赞赏.

App*_*234 4

我相信 Windows 7 确实支持核心协议。当连接到较旧的服务器时,它会降级到 SMB 1.0(按照此处)

\n\n

根据 Windows 7 连接到 Samba 服务器时遇到的问题,我认为指定核心协议的问题是由于 Windows 7 计算机上的 LANMAN 工作站/客户端设置造成的。

\n\n

建议的更改是

\n\n
    \n
  • 启用 LM 和 NTLM 哈希作为安全策略的一部分\nNetwork security: LAN Manager authentication level Send LM & NTLM responses
  • \n
  • 按照此处\xe3\x80\x90HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Lsa \\\xe3\x80\x90LmCompatibilityLevel \xe3\x80\x91将注册表项的值更改为 0
  • \n
  • 将以下参数添加到注册表中的 LanmanWorkStation 和 NetLogon \n HKLM\\System\\CCS\\Services\\LanmanWorkstation\\Parameters\n DWORD DomainCompatibilityMode = 1\n DWORD DNSNameResolutionRequired = 0

    \n\n

    HKLM\\System\\CCS\\Services\\Netlogon\\Parameters\n DWORD RequireSignOnSeal = 0\n DWORD RequireStrongKey = 0

    \n\n

    此处列出了通过注册表和安全策略对这些设置可能进行的更改

  • \n
\n\n

这些更改应确保 LanmanWorkstation 不使用 NTLMv2 会话安全性。

\n