一、工具介绍
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 的强大功能,您可以高效地完成大规模网络扫描任务,快速识别潜在的开放端口和服务,助力网络安全防护工作迈上新的台阶。