2017-10-10 82 views
0

如何使用python来识别远程主机操作系统(Unix/Windows)?我找到的一个解决方案是检查port22是否打开,但知道某些Windows主机也打开了端口22但连接被拒绝。请让我知道这样做的有效方法。提前致谢。使用Python查找远程主机操作系统的有效方法

+0

作为一般答案,你不能。我能想到的唯一方法是识别用Python编写的服务(服务器服务于Django网站,或托管用Python编写的应用程序)。但是,这是有效的,因为你知道这样的应用程序使用Python。它可能只是用另一种语言编码,你无法区分。这是内部实现细节。 –

+0

您是否有权访问这些远程服务器,或者您是否试图通过广告服务(如SSH等)来确定操作系统? – Kyle

+1

一个常用的工具,你需要的是[Nmap](https://nmap.org)。我想,作为一种解决方法,你可以在它上面写一个_Python_ wrapper,或者看看[\ [Python \]:python-nmap](https://pypi.python.org/pypi/python-nmap)。 – CristiFati

回答

1

出于安全原因,大多数操作系统不通过网络通告信息。虽然像nmap这样的工具可以通过扫描网络端口来推断在远程系统上运行的操作系统,但可靠地了解操作系统的唯一方法是登录到系统。在许多情况下,操作系统将作为登录过程的一部分进行报告,因此通过网络建立连接将足以确定操作系统。在远程系统上运行“uname -a”还将检索linux系统上的操作系统类型。

这将从通常包含OS类型的HOST检索欢迎字符串。替换UNAME的有效用户名和HOST的主机名。

 
    #!/usr/bin/env python3 

    import sys 
    import subprocess 

    CMD="uname -a" 

    conn = subprocess.Popen(["ssh", "[email protected]", CMD], 
      shell=False, 
      stdout=subprocess.PIPE, 
      stderr=subprocess.PIPE) 
    res = conn.stdout.readlines() 
    print(res) 
相关问题