1

我需要检查远程主机是 Windows 还是 Unix/Linux。我不能假设它配置了 Web 服务器。我所能做的就是尝试连接到几个 TCP 或 UDP 服务。

哪些 TCP 服务(TCP 端口号)通常会在 Windows 上打开,而不是在 Unix/Linux 上打开,反之亦然?

另一种方法是尝试 ssh 到它,如果它失败,则假定它是 Windows 主机。问题是,我需要这个来选择远程访问方法 ssh 或 Windows 友好的方法,如 psexec。

4

3 回答 3

3

您可以读取nmap的输出来检测远程主机正在运行哪个操作系统。它有一个专门用于此的整个模块。这是使用它的指南

于 2010-07-23T15:06:15.790 回答
1

为什么不尝试以一种方式连接,如果失败,则以另一种方式连接,如果两者都不起作用,请告诉用户?

如果这就是您要做的全部,则无需实际检查操作系统。

于 2010-07-23T15:02:39.247 回答
0

这不是一件容易确定的事情,因为很少有端口会在一个操作系统上始终打开,而在另一个操作系统上则不会。

您可以尝试以下部分/全部

  • 80 http 明显
  • 22,23 Telnet 和 SSH(通常在 windows 上不打开,至少在 *nix 上通常打开一个)
  • 135 由 WMI 使用,因此经常在 Windows 上打开
  • 1443(可能是 SQL Server)
  • 691 由 MS Exchange 路由使用
  • 3389 MS 远程桌面

我建议扫描端口范围可能会给您带来麻烦,特别是如果这些不是您的机器。您可能会发现您的 IP 地址被记录为“端口扫描程序”的可能来源

网络上有一些相当广泛的可用端口列表。例如http://keir.net/portlist.html

于 2010-07-23T17:31:36.737 回答