【问题标题】:How to check programmatically the OS of remote host?如何以编程方式检查远程主机的操作系统?
【发布时间】:2010-11-05 04:39:29
【问题描述】:

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

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

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

【问题讨论】:

    标签: windows linux ssh remote-access


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

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

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

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

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

        【讨论】:

          猜你喜欢
          • 2011-06-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-09-18
          • 1970-01-01
          相关资源
          最近更新 更多