检测远程主机是运行Windows还是Samba

从Linux服务器,我如何快速确定远程机器是运行Windows还是Samba?

我想在远程Windows机器(XP和7)上运行命令列出已安装的软件和版本。 我想从Linux服务器运行这些命令(使用winexe )。

要findWindows主机,我使用这个nmap命令:

nmap -oG - -T4 -p T:445 192.168.1.0/24 | awk '{print $2, $3}' 

不过,我也得到了所有的Samba服务器和几台打印机。

有没有简单的方法,通过额外的nmap选项或通过单独的命令,只获取真正的Windows机器,并避免发送不相关的Windows命令到非Windows服务器和设备?

更新:

我遵循pferate的build议,并使用-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

 nmap -O host 

您也可以尝试查看主机的OS StringServer String 。 虽然可以更改,但Samba的默认服务器string是Samba Server Version %v 。 我不知道什么Windows的默认服务器string是所有的变种,但在Win7 SP1我有Windows 7 Professional 6.1

在我的Linux Samba服务器上,操作系统string是Unix ,在Win7 SP1上是Windows 7 Professional 7601 Service Pack 1

 $ smbclient -L host Domain=[MYDOMAIN] OS=[Unix] Server=[Samba xyz] Sharename Type Comment --------- ---- ------- 

由于这些值可以改变,你不能完全信任它; 但它可以给你一些初步的见解。