![如何找出远程主机上启用了哪个版本的 SMB?](https://linux22.com/image/581147/%E5%A6%82%E4%BD%95%E6%89%BE%E5%87%BA%E8%BF%9C%E7%A8%8B%E4%B8%BB%E6%9C%BA%E4%B8%8A%E5%90%AF%E7%94%A8%E4%BA%86%E5%93%AA%E4%B8%AA%E7%89%88%E6%9C%AC%E7%9A%84%20SMB%EF%BC%9F.png)
我的本地计算机运行的是 Windows 7,它支持最新发布的 SMB 协议版本 (SMB 2.1)。我还有一个远程主机,我不知道该远程主机上安装了什么操作系统或 SMB 支持软件;我只知道远程主机支持一些SMB 协议的版本。
如何从我的 Windows 7 计算机的命令提示符(或 PowerShell)中找出该远程主机支持哪个版本的 SMB?
编辑:虽然我上面提到了 Windows 7,但我确信这个问题与许多系统/网络管理员或桌面支持人员有关,这就是为什么我在这里而不是在 superuser.com 上发布这个问题。
答案1
https://nmap.org/nsedoc/scripts/smb-protocols.html
示例用法
nmap -p445 --script smb-protocols <target>
nmap -p139 --script smb-protocols <target>
答案2
在 Windows 8 及更高版本中,您可以使用 powerhsell 命令Get-SmbConnection
检查每个连接使用了哪个 SMB 版本。
答案3
最简单的方法是安装WireShark并捕获数据包,它会解码数据包并显示协议版本。它们有一个维基百科上的 SMBv2 条目,因此最新版本的 WireShark 应该可以在数据包捕获中对其进行解码。
答案4
以下是获取 SMB 版本的操作:
以管理员身份打开 Powershell。右键单击图标并选择“以管理员身份运行”。
现在,您将在 10 秒内运行 2 个命令,否则 Windows 将关闭未使用的端口。
跑步
dir \\SERVERNAME\C$
运行
Get-SmbConnection
:您的“方言”列是您的 SMB 的版本。
检查此链接上的矩阵以确保操作系统对应于正确的操作系统版本,否则您需要升级您的 SMB。