【发布时间】:2017-10-10 14:36:17
【问题描述】:
如何使用 python 识别远程主机操作系统(Unix/Windows)?我发现的一种解决方案是检查端口 22 是否打开,但后来知道某些 Windows 主机也打开了端口 22,但连接被拒绝。请让我知道做同样事情的有效方法。提前致谢。
【问题讨论】:
-
作为一般答案,您不能。我能想到的唯一方法是识别用 Python 编写的服务(服务器为 Django 网站提供服务,或托管用 Python 编写的应用程序)。但是,这很有效,因为您知道这样的应用程序使用 Python。它可能只是用另一种语言编码的相同,你无法区分。这是内部实现细节。
-
您是否有权访问这些远程服务器,或者您是否尝试通过 SSH 等广告服务确定操作系统?
-
一个常用的工具是Nmap。我想作为一种解决方法,您可以在其上编写一个 Python 包装器,或者查看[Python]: python-nmap。
-
我认为这是一个公平的问题,但我怀疑是否有一个令人满意的答案。如果您可以实际访问主机上运行的某些服务,那么也许您有机会。但是,如果您必须仅从打开哪些 IP 端口来解决问题,我认为您不走运。无论如何,许多系统将其端口隐藏在软件防火墙后面。您将不得不尝试从操作系统对 ICMP“ping”的响应方式中找出操作系统,这几乎是不可能的。
-
这个问题太宽泛了,而且不是 Python 特有的。您可以尝试根据 TCP/IP 堆栈实现的细节(默认窗口大小、默认标志和极端情况下的响应等)来猜测远程操作系统。有一些工具可以尝试为您做到这一点(就像提到的
nmap,见-Ooption),但是关于如何做的一般性讨论远远超出了本网站的范围。
标签: python linux windows remote-access remote-server