从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 String或Server 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 --------- ---- -------
由于这些值可以改变,你不能完全信任它; 但它可以给你一些初步的见解。