从 Linux 服务器,如何快速确定远程机器正在运行 Windows 还是 Samba?
我想在远程 Windows 计算机(XP 和 7)上运行命令来列出已安装的软件和版本。我想从 Linux 服务器运行这些命令(使用操作系统)。
为了查找 Windows 主机,我使用以下 nmap 命令:
nmap -oG - -T4 -p T:445 192.168.1.0/24 | awk '{print $2, $3}'
但是,我还获得了所有的 Samba 服务器和一些打印机。
是否有一种简单的方法,通过附加的 nmap 选项或通过单独的命令,只获取真正的 Windows 机器,并避免向非 Windows 服务器和设备发送不相关的 Windows 命令?
更新:
我听从了 pferate 的建议并使用了-O
。我没有尝试过,因为我认为它会很慢而且不可靠,但在这种情况下它效果很好。我现在用它来检测真正的 Windows 机器:
nmap -oG - -T4 -p T:445 -O --max-os-tries 1 192.168.1.0/24 | grep '445/open/.* Windows' | awk '{print $2, $3}'
答案1
您可以尝试使用 nmap 的 OS 检测选项-O
。
nmap -O host
您还可以尝试查看主机的OS String
或Server String
。尽管可以更改,但 Samba 的默认服务器字符串是Samba Server Version %v
。我不确定 Windows 的所有变体的默认服务器字符串是什么,但在 Win7 SP1 上我有Windows 7 Professional 6.1
。
在我的 Linux Samba 服务器上,操作系统字符串是Unix
,在 Win7 SP1 上,它是Windows 7 Professional 7601 Service Pack 1
。
$ smbclient -L host
Domain=[MYDOMAIN] OS=[Unix] Server=[Samba x.y.z]
Sharename Type Comment
--------- ---- -------
由于这些值可以改变,所以你不能完全信任它;但它可以给你一些初步的见解。