2017-10-10 81 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) 
相關問題