从 Linux 服务器上,我如何快速确定远程机器运行的是 Windows 还是 Samba?
我想在远程 Windows 机器(XP 和 7)上运行命令来列出已安装的软件和版本。我想从 Linux 服务器运行这些命令(使用winexe)。
要查找 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}'
您可以尝试使用 nmap 的操作系统检测选项,
-O
.您也可以尝试查看主机的
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
.由于这些值可以更改,因此您不能完全信任它;但它可以给你一些初步的见解。