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

时间:2011-02-16 08:54:13

标签: windows-7 smb

我已经开始为旧的基于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转储,以防任何人在此过程中发现任何错误:

请求:

SMB dialect negotiate request

回应:

SMB dialect negotiate response

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

2 个答案:

答案 0 :(得分:4)

我相信Windows 7确实支持核心协议。根据{{​​3}}连接到旧服务器时,它会降级到SMB 1.0。

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

建议的更改

  • 启用LM和NTLM哈希作为安全策略的一部分 Network security: LAN Manager authentication level Send LM & NTLM responses
  • 根据here
  • 将注册表项的【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

    here

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

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

答案 1 :(得分:2)

此信息与@ Appleman1234提供的信息基本相同(谢谢!),更容易申请。

  1. 导出您当前的注册设置,以便您可以根据需要恢复所拥有的内容。将以下代码放入.bat文件中,它将向您的C:驱动器导出我们准备修改的3个reg键。
  2. 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
    
    1. 取消限制所需的注册表设置。下面几乎正是@ Appleman1234建议的内容,除了它还启用纯文本密码和禁用安全签名。将以下代码放入.reg文件并将其导入注册表。
    2. 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