如何以编程方式检查远程主机的操作系统?

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

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

另一种方法是尝试SSH,如果它失败,假设它是Windows主机。 问题是,我需要这个,以便select远程访问方法ssh或类似psexec的Windows友好。

Solutions Collecting From Web of "如何以编程方式检查远程主机的操作系统?"

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

为什么不尝试连接一种方式,如果失败,连接另一种方式,如果都不行,告诉用户?

如果这就是你所要做的,那么就没有必要真正检查操作系统。

这不是一件容易的事情,因为在一个操作系统上只有很少的端口会被打开,而在另一个操作系统上却不会被打开。

你可以尝试下面的一些/全部

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

我建议扫描范围的端口可能会导致你陷入困境,特别是如果这些不是你的机器。 您可能会发现您的IP地址被记录为“端口扫描仪”的可能来源

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