python nmap實現埠掃描器教程
NMap,也就是Network Mapper,最早是Linux下的網路掃描和嗅探工具包。
nmap是一個網路連線端掃描軟體,用來掃描網上電腦開放的網路連線端。確定哪些服務執行在哪些連線端,並且推斷計算機執行哪個作業系統(這是亦稱 fingerprinting)。它是網路管理員必用的軟體之一,以及用以評估網路系統安全。
正如大多數被用於網路安全的工具,nmap 也是不少黑客及駭客(又稱指令碼小子)愛用的工具 。系統管理員可以利用nmap來探測工作環境中未經批准使用的伺服器,但是黑客會利用nmap來蒐集目標電腦的網路設定,從而計劃攻擊的方法。
Nmap 常被跟評估系統漏洞軟體Nessus 混為一談。Nmap 以隱祕的手法,避開闖入檢測系統的監視,並儘可能不影響目標系統的日常操作。
Nmap 在黑客帝國(The Matrix)中,連同SSH1的32位元迴圈冗餘校驗漏洞,被崔妮蒂用以入侵發電站的能源管理系統。
基本功能有三個:
- 一是探測一組主機是否線上
- 其次是掃描 主機埠,嗅探所提供的網路服務;
- 還可以推斷主機所用的作業系統 。
Nmap可用於掃描僅有兩個節點的LAN,直至500個節點以上的網路。Nmap 還允許使用者定製掃描技巧。通常,一個簡單的使用ICMP協議的ping操作可以滿足一般需求;也可以深入探測UDP或者TCP埠,直至主機所 使用的作業系統;還可以將所有探測結果記錄到各種格式的日誌中, 供進一步分析操作。
nmap安裝
nmap安裝:
Windows: https://nmap.org/ 下載安裝包,正常安裝就好。
Linux:sudo apt-get install nmap
再安裝python-nmap(針對Python3,未來趨勢而已。2.x的基本不要玩了)
pip3 install python-nmap
Python操作nmap
ping掃描,支援域名,公網IP地址,IP地址段,批量IP地址。
import nmap import sys def nmap_ping_scan(network_prefix): # 建立一個掃描例項 nm = nmap.PortScanner() # 配置nmap引數 ping_scan_raw_result = nm.scan(hosts=network_prefix,arguments='-v -n -sn') # 分析掃描結果,並放入主機清單 host_list = [result['addresses']['ipv4'] for result in ping_scan_raw_result['scan'].values() if result['status']['state'] == 'up'] return host_list if __name__ == '__main__': for host in nmap_ping_scan('www.rspt.org.cn'): print('%-20s %5s' % (host,'is UP'))
E:\CodeLibrarySoftware\Anaconda3\python3.exe
47.94.150.6 is UP
Process finished with exit code 0
A掃描,支援域名,公網IP地址,IP地址段,批量IP地址。
import nmap import sys def nmap_A_scan(network_prefix): nm = nmap.PortScanner() # 配置nmap掃描引數 scan_raw_result = nm.scan(hosts=network_prefix,arguments='-v -n -A') # 分析掃描結果 for host,result in scan_raw_result['scan'].items(): if result['status']['state'] == 'up': print('#' * 17 + 'Host:' + host + '#' * 17) print('-' * 20 + '作業系統猜測' + '-' * 20) for os in result['osmatch']: print('作業系統為:' + os['name'] + ' ' * 3 + '準確度為:' + os['accuracy']) idno = 1 try: for port in result['tcp']: try: print('-' * 17 + 'TCP伺服器詳細資訊' + '[' + str(idno) + ']' + '-' * 17) idno += 1 print('TCP埠號:' + str(port)) try: print('狀態:' + result['tcp'][port]['state']) except: pass try: print('原因:' + result['tcp'][port]['reason']) except: pass try: print('額外資訊:' + result['tcp'][port]['extrainfo']) except: pass try: print('名字:' + result['tcp'][port]['name']) except: pass try: print('版本:' + result['tcp'][port]['version']) except: pass try: print('產品:' + result['tcp'][port]['product']) except: pass try: print('CPE:' + result['tcp'][port]['cpe']) except: pass try: print('指令碼:' + result['tcp'][port]['script']) except: pass except: pass except: pass idno = 1 try: for port in result['udp']: try: print('-' * 17 + 'UDP伺服器詳細資訊' + '[' + str(idno) + ']' + '-' * 17) idno += 1 print('UDP埠號:' + str(port)) try: print('狀態:' + result['udp'][port]['state']) except: pass try: print('原因:' + result['udp'][port]['reason']) except: pass try: print('額外資訊:' + result['udp'][port]['extrainfo']) except: pass try: print('名字:' + result['udp'][port]['name']) except: pass try: print('版本:' + result['udp'][port]['version']) except: pass try: print('產品:' + result['udp'][port]['product']) except: pass try: print('CPE:' + result['udp'][port]['cpe']) except: pass try: print('指令碼:' + result['udp'][port]['script']) except: pass except: pass except: pass if __name__ == '__main__': nmap_A_scan('www.rspt.org.cn')
E:\CodeLibrarySoftware\Anaconda3\python3.exe #################Host:47.94.150.6################# --------------------作業系統猜測-------------------- 作業系統為:Linux 3.10 - 4.11 準確度為:98 作業系統為:Linux 3.16 - 4.6 準確度為:97 作業系統為:Linux 3.2 - 4.9 準確度為:96 作業系統為:Linux 4.4 準確度為:95 作業系統為:Linux 3.2 - 3.8 準確度為:95 作業系統為:Linux 4.10 準確度為:94 作業系統為:Linux 3.16 準確度為:94 作業系統為:Linux 3.13 準確度為:93 作業系統為:Linux 3.13 or 4.2 準確度為:93 作業系統為:Linux 4.2 準確度為:93 -----------------TCP伺服器詳細資訊[1]----------------- TCP埠號:22 狀態:open 原因:syn-ack 額外資訊:Ubuntu Linux; protocol 2.0 名字:ssh 版本:6.6.1p1 Ubuntu 2ubuntu2.8 產品:OpenSSH CPE:cpe:/o:linux:linux_kernel -----------------TCP伺服器詳細資訊[2]----------------- TCP埠號:80 狀態:open 原因:syn-ack 額外資訊:Ubuntu 名字:http 版本:1.4.6 產品:nginx CPE:cpe:/o:linux:linux_kernel -----------------TCP伺服器詳細資訊[3]----------------- TCP埠號:443 狀態:closed 原因:reset 額外資訊: 名字:https 版本: 產品: CPE: -----------------TCP伺服器詳細資訊[4]----------------- TCP埠號:3000 狀態:open 原因:syn-ack 額外資訊:Express middleware 名字:http 版本: 產品:Node.js CPE:cpe:/a:nodejs:node.js -----------------TCP伺服器詳細資訊[5]----------------- TCP埠號:3389 狀態:closed 原因:reset 額外資訊: 名字:ms-wbt-server 版本: 產品: CPE: Process finished with exit code 0
PS: 如果你在執行時遇到這種問題:
OK,開啟nmap.py檔案,在import nmap處按住Ctrl,點選進入nmap。
新增nmap.exe路徑:
ok,自行摸索吧。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。