检测远程主机是否运行 Windows 或 Samba

检测远程主机是否运行 Windows 或 Samba

从 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 StringServer 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
        ---------       ----      -------

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

相关内容