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 核心协议?的主要内容,如果未能解决你的问题,请参考以下文章
spring-integration-smb 是不是支持 SMB2 和 SMB3?
linux无法访问windows samba 提示: Firefox 不知道如何打开此地址,因为协议 (smb) 未和任何程序关联。