masnmap
masscan + nmap 快速端口存活檢測和服務識別。Github: https://github.com/starnightcyber/masnmap
思路很簡單,將masscan在端口探測的高速和nmap服務探測的准確性結合起來,達到一種相對比較理想的效果。 先使用masscan以較高速率對ip存活端口進行探測,再以多進程的方式,使用nmap對開放的端口進行服務探測。
安裝依賴
需先安裝masscan
、nmap
和python-nmap
庫。 masscan和nmap請自行安裝,python-nmap庫可通過如下命令安裝。
- pip3 install python-nmap -i https://pypi.douban.com/simple/
目前其版本為:python-nmap==0.6.1
文件說明
簡要文件說明如下:
- masnmap.py: masscan + nmap結合快速端口存活和服務探測腳本;
- ips.txt: 需探測的ip地址列表,每行一個ip地址;
- services.txt: 保存探測的結果,以"序號:ip:端口:服務名"
msg = '{}:{}:{}:{}'.format(index, ip, port, service)
參數配置說明
簡要參數說明如下:
- ip_file = 'ips.txt' # ip地址文件
- masscan_exe = '/usr/bin/masscan' # masscan可執行文件路徑
- masscan_rate = 1000000 # masscan掃描速率
- masscan_file = 'masscan.json' # masscan掃描結果文件
- process_num = 800 # 執行nmap掃描的進程數量
具體參數值可以自行調優。
檢測說明
主要執行步驟調用在main函數中,如下:
def main(): # Step 1, run masscan to detect all the open port on all ips run_masscan() # Step 2, extract masscan result file:masscan.json to ip:port format extract_masscan() # Step 3, using nmap to scan ip:port run_nmap() # Step 4, save results save_results()
使用說明
直接使用如下命令執行即可。
# python3 masnmap.py
掃描測試說明
對8930個ip地址進行探測,共探測出231687個開放端口及進行服務探測。
# wc -l ips.txt
8930 ips.txt
# wc -l services.txt
231687 services.txt
masscan rate 100 0000,並發nmap進程數800,共耗時: It takes 800 process 4761 seconds to run ... 231687 tasks
具體參數值配置需要根據掃描機器的性能和帶寬進行調整。
腳本優化
版本探測
如上說明,masnmap.py只是探測服務的,如需獲取服務的版本信息,可以使用-sV
替換-sS
。
使用如下替換nmap_scan中對應的內容,可以獲取服務詳細版本信息,但速率會有較大的影響。
ret = nm.scan(ip, port, arguments='-sV')
# print(ret)
name = ret['scan'][ip]['tcp'][int(port)]['name']
product = ret['scan'][ip]['tcp'][int(port)]['product']
version = ret['scan'][ip]['tcp'][int(port)]['version']
msg = '{}:{}:{}:{}:{}:{}'.format(index, ip, port, name, product, version)
其它可優化項
- 使用其它更
有效
的方式替換多進程; - 針對重要服務的版本探測,提高檢測速率;