標籤:python nmap
安裝nmap模組:
pip install python_nma
nmap模組說明:
python-nmap是一個協助使用nmap連接埠掃描器的python庫。它允許輕鬆操縱nmap掃描結果,並且將是一個完美的選擇,為需要自動完成掃描任務的系統管理員提供的工具並報告。它也支援nmap指令碼輸出。
nmap模組類:
ET:Python的輕量級XML支援
PortScanner:連接埠掃描
PortScannerAsync:非同步進行連接埠掃描
PortScannerError:nmap的異常錯誤類
PortScannerHostDict:用於儲存和訪問主機掃描結果的特殊小類
PortScannerYield:通過產生器使用Python中的nmap
Process:表示在單獨的過程中啟動並執行活動,應該是控制掃描進程之類的
convert_nmap_output_to_encoding:編碼
csv:CSV操作模組
io:
nmap:
os:
re:
shlex:
subprocess:
sys:
看大概意思就知道,我們這裡主要是用PortScanner、PortScannerError、PortScannerHostDict這三個類
PortScanner:普通連接埠掃描類
初始化PortScanner類,首先看看該模組的__init__建構函式說明。
檢測系統和nmap版本上的nmap,如果在路徑中找不到nmap,可能會引發PortScannerError異常
__init__(self, nmap_search_path=('nmap', '/usr/bin/nmap', '/usr/local/bin/nmap', '/sw/bin/nmap', '/opt/local/bin/nmap'))
如果你調用PortScanner模組異常,可能就是nmap_search_path預設路徑裡沒找到你安裝的nmap可執行檔,需要你手動修改此參數預設值即可。
該類裡的方法說明:
all_hosts():返回所有主機的排序列表analyse_nmap_xml_scan(nmap_xml_output=None, nmap_err='', nmap_err_keep_trace='', nmap_warn_keep_trace=''):分析NMAP xml掃描輸出param nmap_xml_output:要分析的xml字串command_line():返回用於掃描的命令列csv():將CSV輸出作為文本返回get_nmap_last_output():以原始文本返回nmap的最後文本輸出has_host(host):如果主機有結果則返回True,否則返回Falselistscan(hosts='127.0.0.1'):不要掃描,但解釋目標主機並返回一個主機列表nmap_version():如果檢測到返回nmap版本scan(hosts='127.0.0.1', ports=None, arguments='-sV', sudo=False):掃描指定的主機如果nmap輸出不是xml,可能會引發PortScannerError異常hosts:需要掃描的IP或IP段ports:掃描的連接埠arguments:nmap的參數字串'-sU -sX -sC'sudo:是否使用sudo啟動nmapscaninfo():返回scaninfo結構{'tcp': {'services': '22', 'method': 'connect'}}scanstats():返回scanstats結構{'uphosts': '3', 'timestr': 'Thu Jun 3 21:45:07 2010', 'downhosts': '253', 'totalhosts': '256', 'elapsed': '5.79'}
執行個體示範:
>>> nm = nmap.PortScanner() #執行個體化普通連接埠掃描對象nm>>> nm.nmap_version() #看看當前系統nmap版本(7, 70) #目前的版本為nmap7.7>>> date = nm.scan('127.0.0.1','22','-sV') #進行掃描,會彈出nmap cmd視窗,會一直等待掃描結束,然後返回json格式的掃描結果date{'nmap': {'command_line': 'nmap -oX - -p 22 -sV 127.0.0.1', 'scaninfo': {'tcp': {'method': 'syn', 'services': '22'}}, 'scanstats': {'timestr': 'Fri Apr 13 10:43:29 2018', 'elapsed': '8.71', 'uphosts': '1', 'downhosts': '0', 'totalhosts': '1'}}, 'scan': {'127.0.0.1': {'hostnames': [{'name': '', 'type': ''}], 'addresses': {'ipv4': '127.0.0.1'}, 'vendor': {}, 'status': {'state': 'up', 'reason': 'localhost-response'}, 'tcp': {22: {'state': 'open', 'reason': 'syn-ack', 'name': 'ssh', 'product': 'Microsoft Windows IoT sshd', 'version': '1.100', 'extrainfo': 'protocol 2.0', 'conf': '10', 'cpe': 'cpe:/o:microsoft:windows_10:::iot_core'}}}}}>>> nm.all_hosts()['127.0.0.1']>>> nm.command_line()'nmap -oX - -p 22 -sV 127.0.0.1'>>> nm.csv()'host;hostname;hostname_type;protocol;port;name;state;product;extrainfo;reason;version;conf;cpe\r\n127.0.0.1;;;tcp;22;ssh;open;Microsoft Windows IoT sshd;protocol 2.0;syn-ack;1.100;10;cpe:/o:microsoft:windows_10:::iot_core\r\n'>>> nm.get_nmap_last_output()'<?xml version="1.0" encoding="UTF-8"?>\r\n<!DOCTYPE nmaprun>\r\n<?xml-stylesheet href="file:///d:/Program Files (x86)/Nmap/nmap.xsl" type="text/xsl"?>\r\n<!-- Nmap 7.70 scan initiated Fri Apr 13 10:43:20 2018 as: nmap -oX - -p 22 -sV 127.0.0.1 -->\r\n<nmaprun scanner="nmap" args="nmap -oX - -p 22 -sV 127.0.0.1" start="1523587400" startstr="Fri Apr 13 10:43:20 2018" version="7.70" xmloutputversion="1.04">\r\n<scaninfo type="syn" protocol="tcp" numservices="1" services="22"/>\r\n<verbose level="0"/>\r\n<debugging level="0"/>\r\n<host starttime="1523587408" endtime="1523587409"><status state="up" reason="localhost-response" reason_ttl="0"/>\r\n<address addr="127.0.0.1" addrtype="ipv4"/>\r\n<hostnames>\r\n</hostnames>\r\n<ports><port protocol="tcp" portid="22"><state state="open" reason="syn-ack" reason_ttl="64"/><service name="ssh" product="Microsoft Windows IoT sshd" version="1.100" extrainfo="protocol 2.0" ostype="Windows 10 IoT Core" method="probed" conf="10"><cpe>cpe:/o:microsoft:windows_10:::iot_core</cpe></service></port>\r\n</ports>\r\n<times srtt="0" rttvar="5000" to="100000"/>\r\n</host>\r\n<runstats><finished time="1523587409" timestr="Fri Apr 13 10:43:29 2018" elapsed="8.71" summary="Nmap done at Fri Apr 13 10:43:29 2018; 1 IP address (1 host up) scanned in 8.71 seconds" exit="success"/><hosts up="1" down="0" total="1"/>\r\n</runstats>\r\n</nmaprun>\r\n'>>> nm.scaninfo(){'tcp': {'method': 'syn', 'services': '22'}}>>> nm.scanstats(){'timestr': 'Fri Apr 13 10:43:29 2018', 'elapsed': '8.71', 'uphosts': '1', 'downhosts': '0', 'totalhosts': '1'}>>>
PortScannerHostDict類說明:
該類裡的方法說明:
all_ip():返回ip連接埠列表all_protocols():返回所有掃描協議的列表>>> nm['127.0.0.1'].all_protocols()['tcp']all_sctp():返回sctp連接埠列表all_tcp():返回tcp連接埠列表>>> nm['127.0.0.1'].all_tcp()[22]all_udp():返回udp連接埠列表has_ip(port):如果ip連接埠具有info,則返回true,否則返回Falsehas_sctp(port):如果sctp連接埠有info,則為真,否則為Falsehas_tcp(port):如果tcp連接埠有info,則返回true,否則返回Falsehas_udp(port):如果udp連接埠有info,則返回true,否則返回Falsehostname():返回使用者記錄或列表主機名稱的第一個主機名稱hostnames():返回主機名稱列表ip(port):返回資訊的IP連接埠sctp(port):返回資訊的sctp連接埠state():返回主機狀態tcp(port):返回tcp連接埠的資訊>>> nm['127.0.0.1'].state()'up'udp(port):返回udp連接埠的資訊uptime():返回主機狀態
python模組學習----nmap模組