Python識別遠程主機操作系統


最近在寫exp,需要識別遠程主機操作系統。

通常判斷遠程主機操作系統,有以下幾種方式:

  1. 大小寫判斷
  2. ttl值判斷
  3. 掃描器掃描

由於不清楚目標鏈接是否存在某個文件或者目錄,因此使用大小寫來判斷操作系統,也並非良策。

ttl值可以自定義,因此也不太好判斷是否正確。

因此就想到了調用掃描器的掃描結果,來判斷掃描是否正確。

這里我調用的是python-nmap這個庫。

安裝方式

pip install python-nmap

使用方式如下

import nmap
def scan_system(domain_name):
    nm = nmap.PortScanner()  #創建掃描對象
    os_list = []
    try:
        scan_result=nm.scan(hosts=domain_name,arguments='-O')  #添加掃描參數
        for i,j in scan_result['scan'].items():                #將掃描結果轉成字典
            if j['osmatch']:                                   #判斷是否有osmatch
                for k in j['osmatch']:
                    for os in k['osclass']:
                        # print(domain_name,os['osfamily'],'\n')
                        os_list.append(os['osfamily'])         #osfamily對應的是操作系統家族
            else:
                break
    except Exception as e:
        print(domain_name,'None\n')                            #當鏈接不能被訪問時,拋出異常
    print(domain_name,max(os_list, key=os_list.count))
   
    
if __name__ == "__main__":
    url = []                              #url列表
    for i in range(len(url)):
        scan_system(url[i])

 nmap掃描結果是模糊測試的結果,會返回很多測試的數據包,數據包的結果中,含有linux,windows以及別的系統,因此我在這里是統計了數據包中頻數最大的操作系統,然后輸出結果。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM