最近在寫exp,需要識別遠程主機操作系統。
通常判斷遠程主機操作系統,有以下幾種方式:
- 大小寫判斷
- ttl值判斷
- 掃描器掃描
由於不清楚目標鏈接是否存在某個文件或者目錄,因此使用大小寫來判斷操作系統,也並非良策。
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以及別的系統,因此我在這里是統計了數據包中頻數最大的操作系統,然后輸出結果。
