10

我已经开始为基于 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 似乎确实不支持核心协议。无论如何,任何额外的信息将不胜感激。

4

2 回答 2

4
于 2012-03-03T17:23:03.083 回答
2

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

  1. 导出您当前的 reg 设置,以便在必要时恢复您的设置。将以下代码放入文件中,它会将我们准备修改的 3 个注册密钥.bat导出到您的驱动器。C:
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文件并将其导入您的注册表。
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
于 2015-01-16T15:19:35.980 回答