masscan + nmap 快速端口存活檢測和服務識別


masnmap

masscan + nmap 快速端口存活檢測和服務識別。Github:  https://github.com/starnightcyber/masnmap

思路很簡單,將masscan在端口探測的高速和nmap服務探測的准確性結合起來,達到一種相對比較理想的效果。 先使用masscan以較高速率對ip存活端口進行探測,再以多進程的方式,使用nmap對開放的端口進行服務探測。

安裝依賴

需先安裝masscan nmappython-nmap庫。 masscan和nmap請自行安裝,python-nmap庫可通過如下命令安裝。

目前其版本為: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)

其它可優化項

  • 使用其它更有效的方式替換多進程;
  • 針對重要服務的版本探測,提高檢測速率;
 
       


免責聲明!

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



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