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

Posted

技术标签:

【中文标题】Windows 7 是不是真的支持 SMB 核心协议?【英文标题】:Does Windows 7 actually support the SMB core protocol?Windows 7 是否真的支持 SMB 核心协议? 【发布时间】:2011-06-28 05:06:33 【问题描述】:

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

请求:

回应:

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

【问题讨论】:

【参考方案1】:

我相信 Windows 7 确实支持核心协议。根据here 连接到旧服务器时,它会降级到 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 会话安全性。

【讨论】:

【参考方案2】:

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

    导出您当前的 reg 设置,以便在必要时恢复您的设置。将以下代码放入 .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
    取消限制所需的注册表设置。以下几乎与@Appleman1234 所建议的完全一样,除了它还启用纯文本密码并禁用安全签名。将以下代码放入 .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

【讨论】:

以上是关于Windows 7 是不是真的支持 SMB 核心协议?的主要内容,如果未能解决你的问题,请参考以下文章

smb服务是什么

iOS 是不是支持通过 SMB 进行文件操作?

spring-integration-smb 是不是支持 SMB2 和 SMB3?

windows server 2016 网络服务

Windows上面挂载NFS共享

linux无法访问windows samba 提示: Firefox 不知道如何打开此地址,因为协议 (smb) 未和任何程序关联。