一、工具介紹
Masscan是一款開源、高速的網絡端口掃描工具,設計目標是實現最快的掃描速度。它能夠在極短的時間內完成大規模的網絡掃描,適用于互聯網級別的掃描任務。它采用異步傳輸和自定義TCP/IP協議棧技術,最快可實現每秒160萬數據包的掃描速率,支持TCP、UDP、ICMP等多種協議,并兼容部分Nmap參數,具備高度的可定制性。
二、技術原理?
1?.異步傳輸機制?
通過多線程并發發送SYN數據包,并異步接收響應,避免傳統掃描工具的三次握手延遲。??
?2.自定義協議棧?
繞過操作系統網絡堆棧限制,直接操作網絡接口卡,減少系統調用開銷,提升掃描效率。??
3?.半開放掃描?
僅發送SYN包,通過接收SYN-ACK或RST判斷端口狀態,無需建立完整TCP連接。??
三、主要功能
1.超高速度:支持每秒百萬級數據包掃描,6分鐘可完成互聯網全端口掃描。????
默認情況下,masscan的發包速率是100每秒,可以通過 ‘–rate’ 命令設置發包速率。
常見參數
--top-port 100:掃描100個常?端?
--adapter-ip:指定發包的ip地址
-S:欺騙源IP
-v interface : 詳細輸出
-vv interface : 使??常冗?的輸出
-e interface : 使?指定的接?
--adapter-port : 指定發包源端?
--adapter-mac : 指定發包的源MAC地址
--router-mac : 指定?關MAC地址
--exclude : IP地址范圍?名單,防?masscan掃描
--excludefile : 指定IP地址范圍?名單?件
--includefile,-iL : 讀取?個范圍列表進?掃描
--wait : 指定發包后的等待時間
2.靈活配置:支持自定義掃描參數,如掃描速率、端口范圍、協議類型等。
自定義掃描速率(--rate參數調整發包速度)。
批量掃描IP段(如192.168.1.0/24)和端口范圍(-p1-65535)。
3.廣泛協議支持:支持TCP、UDP、ICMP等多種掃描協議。
4.異步發送:利用異步網絡I/O,實現高效的數據包發送和接收。
5.結果導出:支持多種輸出格式,便于后續分析和集成。
支持文本、XML、JSON等格式,便于結果分析(-oX/-oG參數)。
-oX filename :輸出到filename的XML。 ?
-oG filename :輸出到filename在的grepable格式。 ?
?-oJ filename :輸出到filename在JSON格式。
掃描特定IP段的80/443端口(速率10萬包/秒)
masscan 192.168.1.0/24 -p80,443 --rate 100000
全端口掃描并獲取服務版本信息
masscan 10.0.0.0/8 -p0-65535 --banners -oX result.xml
可以使用 --echo 將當前的配置輸出到一個配置文件
masscan -p80,8000-8100 10.0.0.0/8 --echo > xxx.conf
利用 -c 來制定配置文件進行掃描
masscan -c xxx.conf --rate 1000
masscan的常用命令記錄-CSDN博客
masscan詳解_nex1less-2048 AI社區
四、安裝部署及使用方法
使用教程第一步:環境準備
-
操作系統選擇
- Masscan 主要在 Linux 系統上運行,推薦使用 Ubuntu 或 Kali Linux。
- 也可以在 macOS 和 Windows 上通過 Cygwin 或 WSL(Windows Subsystem for Linux)進行安裝和使用。
-
更新系統
sudo apt update && sudo apt upgrade -y
-
在安裝 Masscan 前,確保系統是最新的。
-
第二步:安裝 Masscan
-
通過包管理器安裝
sudo apt install masscan
-
在 Debian 或 Ubuntu 系統上,可以直接使用 apt 進行安裝。
-
-
從源碼編譯(可選)
sudo apt install git build-essentialgit clone https://github.com/robertdavidgraham/masscancd masscanmakesudo make install
-
如果需要最新版本或自定義配置,可以從源碼編譯。
-
第三步:基本掃描操作
-
驗證安裝
masscan --version
- 應輸出 Masscan 的版本信息。
- 運行以下命令檢查 Masscan 是否安裝成功。
-
基本端口掃描
sudo masscan 192.168.1.1 -p80
- 192.168.1.1:目標IP地址。
- -p80:掃描目標端口80。
- 使用 Masscan 掃描指定IP地址上的特定端口(例如掃描 192.168.1.1 的80端口)。
-
掃描速率限制
sudo masscan 192.168.1.1 -p80 --rate=1000
- --rate=1000:設置掃描速率為每秒1000個包。
- 為避免網絡擁堵,可以限制掃描速率(例如每秒發送1000個包)。
-p <ports,--ports <ports>> 指定端口進行掃描
--banners 獲取banner信息,支持少量的協議
--rate <packets-per-second> 指定發包的速率
-c <filename>, --conf <filename> 讀取配置文件進行掃描
--echo 將當前的配置重定向到一個配置文件中
-e <ifname> , --adapter <ifname> 指定用來發包的網卡接口名稱
--adapter-ip <ip-address> 指定發包的IP地址
--adapter-port <port> 指定發包的源端口
--adapter-mac <mac-address> 指定發包的源MAC地址
--router-mac <mac address> 指定網關的MAC地址
--exclude <ip/range> IP地址范圍黑名單,防止masscan掃描
--excludefile <filename> 指定IP地址范圍黑名單文件
--includefile,-iL <filename> 讀取一個范圍列表進行掃描
--ping 掃描應該包含ICMP回應請求
--append-output 以附加的形式輸出到文件
--iflist 列出可用的網絡接口,然后退出
--retries 發送重試的次數,以1秒為間隔
--nmap 打印與nmap兼容的相關信息
--http-user-agent <user-agent> 設置user-agent字段的值
--show [open,close] 告訴要顯示的端口狀態,默認是顯示開放端口
--noshow [open,close] 禁用端口狀態顯示
--pcap <filename> 將接收到的數據包以libpcap格式存儲
--regress 運行回歸測試,測試掃描器是否正常運行
--ttl <num> 指定傳出數據包的TTL值,默認為255
--wait <seconds> 指定發送完包之后的等待時間,默認為10秒
--offline 沒有實際的發包,主要用來測試開銷
masscan -sL 10.0.0.0/24 > c段.txt
????????masscan -sL 10.0.0.0/16 > b段.txt
????????masscan -sL 10.0.0.0/8 ?> a段.txt 隨機生成ip
sL :顯示掃描的所有主機的列表
xx.txt :把終端命令行中的結果保存在 xx.txt 文件中
masscan的常用命令記錄-CSDN博客
要掃描的目標IP地址或地址范圍,可以使用CIDR表示法,如192.168.1.0/24,也可以使用逗號分隔的列表,如192.168.1.1,192.168.1.2,或者使用連字符表示的范圍,如192.168.1.1-192.168.1.10。也可以使用0.0.0.0/0來表示整個互聯網,但是這需要自己確認并排除一些特殊的地址,如255.255.255.255。
port是要掃描的目標端口或端口范圍,可以使用逗號分隔的列表,如22,80,443,或者使用連字符表示的范圍,如1-65535。也可以使用0-65535來表示所有的端口,但是這會花費更多的時間和資源。
[options]可以設置的一些可選參數,用來控制Masscan的行為和輸出。Masscan有很多可選參數,可以使用--help或--nmap來查看它們的說明和用法。
以下是一些常用的參數:
--rate:設置掃描的速率,單位是每秒發送的數據包數,如--rate=10000表示每秒發送10000個數據包。Masscan的默認速率是100個數據包每秒,我們可以根據您的網絡環境和需求來調整這個參數,但是請注意不要超過網絡帶寬或目標的容忍度,以免造成網絡擁塞或目標崩潰。
--banners:獲取目標端口的banner信息,以識別服務的類型和版本,如--banners。Masscan默認不獲取banner信息,我們可以開啟這個參數來獲取更多的信息,但是請注意這會增加掃描的時間和資源。
--source--ip:設置源IP地址,用來偽裝我們的真實IP地址,如--source-ip=192.168.1.100。Masscan默認使用您的真實IP地址作為源IP地址,您可以使用這個參數來隱藏您的身份,但是請注意您必須使用您可以控制的IP地址,否則您將無法接收到目標的回應。
--exclude:排除一些不想掃描的目標地址或地址范圍,如--exclude=192.168.1.1,192.168.1.10-192.168.1.20。Masscan默認掃描您指定的所有目標地址,您可以使用這個參數來排除一些特殊的地址,如廣播地址、多播地址、回環地址等,或者一些您不感興趣的地址。
--output-format:設置輸出的格式,如--output-format=list。Masscan支持多種輸出格式,如list(列表格式)、binary(二進制格式)、xml(XML格式)、json(JSON格式)等。您可以根據您的需求和喜好來選擇合適的輸出格式。
--output-filename:設置輸出的文件名,如--output-filename=scan.txt。Masscan默認將輸出打印到標準輸出,您可以使用這個參數來將輸出保存到一個文件中,以便于后續的分析和處理。
Masscan工具使用指南-CSDN博客
第四步:高級掃描配置
-
掃描多個端口
sudo masscan 192.168.1.1 -p80,443,22
掃描多個端口(例如80,443,22)。 -
掃描端口范圍
sudo masscan 192.168.1.1 -p1-1000
掃描端口范圍(例如1到1000)。 -
掃描整個子網
sudo masscan 192.168.1.0/24 -p80,443,22
掃描整個子網中的所有IP地址(例如掃描 192.168.1.0/24 網絡)。 -
指定輸出文件
sudo masscan 192.168.1.0/24 -p80,443,22 -oL results.txt
- -oL results.txt:將結果以列表形式輸出到 results.txt 文件。
- 將掃描結果輸出到文件(例如 results.txt)。
-
選擇掃描協議
sudo masscan 192.168.1.0/24 -p80,443,22 --scan-type syn
-
選擇不同的掃描協議(例如TCP SYN掃描)。
-
Masscan的輸出取決于您選擇的輸出格式和文件名,如果您沒有指定輸出格式和文件名,Masscan將以列表格式將輸出打印到標準輸出,每一行表示發現了一個開放的端口,包括端口號、協議類型和IP地址。
如果您開啟了--banners參數,Masscan還會輸出目標端口的banner信息,如下所示:
1 Banner on port 22/tcp on 192.168.1.1: SSH-2.0-OpenSSH_7.9p1 Debian-10+deb10u2 ?
2 Banner on port 80/tcp on 192.168.1.2: HTTP/1.1 200 OK\r\nServer: nginx/1.14.2\r\nDate: Sat, 22 May 2021 08:23:45 GMT\r\nContent-Type: text/html\r\nContent-Length: 612\r\nLast-Modified: Tue, 19 Feb 2019 09:38:21 GMT\r\nConnection: close\r\nETag: "5c6bf9cd-264"\r\nAccept-Ranges: bytes\r\n\r\n ?
3 Banner on port 443/tcp on 192.168.1.3: TLS: Server Hello? ?
每一行表示獲取到了一個端口的banner信息,包括端口號、協議類型、IP地址和banner內容。
根據這些信息來判斷目標的操作系統、服務類型和版本等信息,以便于后續的滲透測試和漏洞利用。
如果指定了輸出格式和文件名,Masscan將以相應的格式將輸出保存到相應的文件中,您可以使用其他的工具或程序來讀取和分析這些文件,如nmap、metasploit等。
Masscan還支持一些特殊的輸出格式,如grepable(可用grep命令過濾的格式)、redis(可存儲到redis數據庫的格式)、certs(可獲取目標證書的格式)等,可以根據需求和喜好來選擇合適的輸出格式。
第五步:結果分析與可視化
-
查看掃描結果
cat results.txt
-
打開輸出文件查看掃描結果。
-
-
使用 Nmap 進行進一步分析
sudo nmap -sV -p80,443,22 192.168.1.1
-
根據 Masscan 的結果,使用 Nmap 進行更詳細的端口掃描和服務識別。
-
-
數據可視化
import matplotlib.pyplot as pltimport pandas as pd# 假設 results.txt 是逗號分隔的文件data = pd.read_csv('results.txt', delimiter=': ', names=['IP', 'Port'])plt.hist(data['Port'], bins=range(1, 65535, 100))plt.title('開放端口分布')plt.xlabel('端口號')plt.ylabel('開放次數')plt.show()
-
利用工具(如 Excel、Python 的 Matplotlib、Seaborn)對掃描結果進行圖表展示。例如,使用 Python 統計開放端口的分布情況。
-
第六步:優化與最佳實踐
-
避免掃描被檢測
sudo masscan 192.168.1.0/24 -p80,443,22 --rate=500 --wait=0 --randomize-hosts
使用隨機化源端口、調整掃描速率、添加延遲等方式,減少被目標網絡檢測為掃描行為的風險。 -
分布式掃描
-
對于大規模掃描任務,可以利用多臺機器協同工作,分擔掃描負載。
-
使用 Masscan 的接口參數(如指定IP地址和速率)進行分段掃描,再合并結果。
-
-
定期掃描與監控
定期進行網絡掃描,監控網絡狀態變化,及時發現潛在的安全威脅,并采取相應的防護措施。
五、安全與合規性提示
1.合法授權:確保在進行任何網絡掃描之前,已獲得相關網絡所有者的明確授權。
2.負責任使用:避免高頻率、長時間的掃描,以減少對目標網絡的影響和被檢測為惡意行為的風險。
3.數據隱私:妥善處理掃描過程中收集到的敏感數據,遵守數據保護法規。
4.了解法規:不同國家和地區對網絡掃描有不同的法律規定,務必熟悉并遵守適用法規。
六、總結
Masscan 以其無與倫比的掃描速度和高效性,成為大規模網絡掃描的首選工具。無論是網絡安全評估、滲透測試,還是學術研究,Masscan 都能提供強大的支持。
合理使用 Masscan,您將能夠深入了解網絡環境中的安全漏洞,采取必要的防護措施,構建更加安全可靠的網絡體系。利用 Masscan 的強大功能,您可以高效地完成大規模網絡掃描任務,快速識別潛在的開放端口和服務,助力網絡安全防護工作邁上新的臺階。