Masscan:高效端口扫描神器!全参数详细教程!Kali Linux入门教程!黑客渗透测试!
masscan 是一个互联网规模的端口扫描器。它可以扫描整个互联网在 5 分钟内,每秒传输 1000 万个数据包, 来自一台机器。它的用法(参数、输出)类似于 nmap,最著名的端口扫描器。如有疑问,请尝试其中一项功能——支持广泛使用的功能 支持多机扫描,同时支持单机深度扫描机器则不然。内部使用异步传输,类似于端口扫描器喜欢 scanrand, unicornscan, 和 ZMap。它更加灵活,
简介
masscan 是一个互联网规模的端口扫描器。它可以扫描整个互联网在 5 分钟内,每秒传输 1000 万个数据包, 来自一台机器。
它的用法(参数、输出)类似于 nmap,最著名的端口扫描器。如有疑问,请尝试其中一项功能——支持广泛使用的功能 支持多机扫描,同时支持单机深度扫描机器则不然。
内部使用异步传输,类似于端口扫描器喜欢 scanrand, unicornscan, 和 ZMap。它更加灵活,允许 任意端口和地址范围。
注意:masscan 使用自己的专用 TCP/IP 堆栈 。除了简单的端口扫描可能会导致与本地 TCP/IP 堆栈发生冲突。这意味着你需要使用 --src-ip 选项从不同的 IP 地址运行,或者使用 --src-port 配置 Masscan 使用的源端口,然后还配置内部防火墙(例如 pf 或者 iptables)对这些端口进行防火墙 来自操作系统的其余部分。
MASSCAN 是传输 SYN 数据包的 TCP 端口扫描器异步并产生类似于 nmap 的结果, 最著名的端口扫描器。在内部,它运行更像是 scanrand、unicornscan 和 ZMap,使用异步传输。 它是一个灵活的实用程序,允许任意地址和端口范围。
安装
源码安装
我们通过以下命令先克隆项目到本地,建议挂好代理。
git clone https://github.com/robertdavidgraham/masscan.git
之后进入masscan目录,查看一下
cd masscan/
ls
输入make,编译源码。
make
运行以下命令将程序放入 bin/masscan 子目录中
sudo make install
输入以下命令,如果出现这个界面就说明安装成功了。
masscan -h
APT包管理器安装
masscan 默认在Kali Linux里面安装好了。也可以通过以下命令进行安装
sudo apt install masscan
使用
1. -h / --help
查看 masscan 的帮助信息
masscan -h
masscan --help
2. 常规使用
用法 : masscan [options] [<IP|RANGE>... -pPORT[,PORT...]]
masscan 192.168.174.139 -p80
3. <ip/range>
命令行中任何不以 '-' 为前缀的内容都被视为 IP 地址或范围。有三种有效格式。
第一种是单个 IPv4 地址,如“192.168.0.1”。
masscan 192.168.174.145 -p80
第二种是范围,如“10.0.0.1-10.0.0.100”。
masscan 192.168.174.100-192.168.174.150 -p80
第三种是 CIDR 地址,如“0.0.0.0/0”。必须指定至少一个目标。可以指定多个目标。可以将其指定为用空格分隔的多个选项,也可以用逗号分隔为单个选项,例如 10.0.0.0/8,192.168.0.1。
masscan 192.168.174.0/24 -p80
4. --range <ip/range>
与上面描述的目标范围规范相同,只是作为命名参数而不是未命名参数。
masscan --range 192.168.174.100-192.168.174.200 -p80
5. -p <ports, --ports <ports>
指定要扫描的端口。可以指定单个端口,如 -p80。可以指定端口范围,如 -p 20-25。可以指定端口/范围列表,如 -p80,20-25。还可以指定 UDP 端口,如 --ports U:161,U:1024-1100。
masscan 204.79.197.200 -p80
masscan 204.79.197.200 -p 50-80
masscan 192.168.174.132 -p80,20-25
masscan 204.79.197.200 --ports U:161,U:1024-1100
6. --banners
指定应抓取的横幅,如 HTTP 服务器版本、HTML 标题字段等。仅支持少数协议。
masscan 204.79.197.200 -p80 --banners
7. --rate <packets-per-second>
指定传输数据包所需的速率。这个值可以是非常小的数字,例如 0.1,表示以每 10 秒一个的速率传输数据包;也可以是非常大的数字,例如 10000000,表示尝试以每秒 1000 万个数据包的速度传输数据包。根据我的经验,Windows 可以达到每秒 25 万个数据包,而最新版本的 Linux 可以达到每秒 250 万个数据包。要达到每秒 2500 万个数据包的速度,需要 PF_RING 驱动程序。
masscan --range 192.168.174.0/24 -p80,1000-2000 --rate 10000
8. -c <filename>, --conf <filename>
读入配置文件。配置文件的格式如下所述。
masscan -c config.conf
通过扫描可以看到我们输出了结果文件。
9. --resume <filename>
与 --conf 相同,但会自动设置一些选项,例如 --append-output。配置文件的格式如下所述。
当用户按下 ctrl-c 时,扫描将停止,并且扫描的当前状态将保存在文件“paused.conf”中。可以使用 --resume 选项恢复扫描:
masscan --resume paused.conf
程序不会立即退出,而是会等待默认的 10 秒以从互联网接收结果并保存结果,然后完全退出。可以使用 --wait 选项更改此时间。
10. --echo
不运行,而是将当前配置转储到文件中。然后可以将此文件与 -c 选项一起使用。此输出的格式在下文的“配置文件”中描述。
masscan --range 192.168.174.0/24 -p80,8000-8100 --echo > xxx.conf
11. -e <ifname>, --adapter <ifname>
使用命名的原始网络接口,例如“eth0”或“dna1”。如果未指定,则将使用找到的第一个具有默认网关的网络接口。
masscan --range 192.168.174.0/24 -p 1-1000 --rate 10000 -e eth0
12. --adapter-ip <ip-address>
使用此 IP 地址发送数据包。如果未指定,则将使用绑定到网络接口的第一个 IP 地址。可以指定一个范围,而不是单个 IP 地址。注意:范围的大小必须是 2 的偶数次方,例如 1、2、4、8、16、1024 等地址。
masscan --range 39.156.66.10 -p 1-100 --rate 10000 --adapter-ip 192.168.174.134
13. --adapter-port <port>
使用此端口号作为源发送数据包。如果未指定,将在 40000 到 60000 范围内随机选择一个端口。此端口应由主机防火墙(如 iptables)过滤,以防止主机网络堆栈干扰到达的数据包。可以指定一个范围,而不是单个端口,如 40000-40003。注意:范围的大小必须是 2 的偶数幂,例如上面的例子总共有 4 个地址。
masscan --range 39.156.66.10 -p 1-1000 --rate 10000 --adapter-port 40000
14. --adapter-mac <mac-address>
使用此地址作为源 MAC 地址发送数据包。如果未指定,则将使用绑定到网络接口的第一个 MAC 地址。
masscan --range 39.156.66.10 -p 1-10000 --rate 10000 --adapter-mac 00-11-22-33-44-55
15. --router-mac <mac address>
将数据包发送到此 MAC 地址作为目的地。如果未指定,则将对网络接口的网关地址进行 ARP。
masscan --range 39.156.66.10 -p 1-10000 --rate 10000 --router-mac 66-55-44-33-22-11
16. --ping
表示扫描应包含 ICMP 回显请求。这可能包含在 TCP 和 UDP 扫描中。
masscan --range 192.168.174.0/24 -p 1-10000 --rate 10000 --ping
17. --exclude <ip/range>
将 IP 地址或范围列入黑名单,防止其被扫描。这将覆盖任何目标规范,保证不会扫描此地址/范围。其格式与常规目标规范相同。
masscan --range 192.168.174.0/24 -p80 --rate 1000 --exclude 192.168.174.145
18. --excludefile <filename>
以上述相同的目标格式读入排除范围列表。这些范围将覆盖任何目标,防止其被扫描。
masscan --range 192.168.174.0/24 -p80 --rate 1000 --excludefile exclude.txt
19. --append-output
使输出附加到文件,而不是覆盖文件。
masscan --range 192.168.174.0/24 -p80 --rate 1000 --append-output
20. --iflist
列出可用的网络接口,然后退出。
masscan --iflist
21. --retries
发送重试次数,间隔 1 秒。请注意,由于此扫描仪是无状态的,因此无论是否已收到回复,都会发送重试。
masscan --range 192.168.174.0/24 -p80 --rate 1000 --retries 3
22. --nmap
打印有关这些选项的 nmap 兼容性替代方案的帮助。
masscan --nmap
23. --pcap-payloads
从包含数据包的 libpcap 文件中读取数据包并提取 UDP 有效负载,并将这些有效负载与目标端口关联。然后,在发送具有匹配目标端口的 UDP 数据包时将使用这些有效负载。每个端口只会记住一个有效负载。类似于 --nmap-payloads。
masscan 192.168.1.0/24 -p53 --rate=1000 --pcap-payloads udp_packets.pcap
24. --nmap-payloads <filename>
以与 nmap 文件 nmap-payloads 相同的格式读取文件。这包含 UDP 有效负载,以便我们可以发送有用的 UDP 数据包而不是空数据包。类似于 --pcap-payloads。
masscan 192.168.1.0/24 -p161 --rate=500 --nmap-payloads nmap-payloads
25. --http-user-agent <user-agent>
在执行 HTTP 请求时,用指示的值替换现有的 user-agent字段。
masscan --range 192.168.174.0/24 -p80 --rate 1000 --http-user-agent "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"
26. --open-only
仅报告开放端口,不报告关闭端口。
masscan --range 192.168.174.0/24 -p80 --rate 1000 --open-only
27. --pcap <filename>
将接收到的数据包(但不发送的数据包)保存到 libpcap 格式的文件中。
masscan --range 192.168.174.0/24 -p80 --rate 1000 --pcap output.pcap
通过输出,我们得到pacp文件。
我们可以使用 WireShark 去打开查看文件。
28. --packet-trace
打印发送和接收的数据包的摘要。这在低速率(例如每秒几个数据包)下很有用,但在高速率下会使终端不堪重负。
masscan --range 192.168.174.0/24 -p80 --rate 1000 --packet-trace
29. --pfring
强制使用 PF_RING 驱动程序。如果 PF_RING DNA 驱动程序不可用,程序将退出。
masscan --range 192.168.174.0/24 -p80 --rate 1000 --pfring
30. --resume-index
扫描暂停时的点。
masscan --range 192.168.174.0/24 -p80 --rate 1000 --resume-index 10
31. --resume-count
退出前要发送的最大探测数。这在与 --resume-index 一起使用时很有用,可以分割扫描并将其拆分到多个实例中,尽管 --shards 选项可能更好。
masscan --range 192.168.174.0/24 -p22 --rate 1000 --resume-index 100 --resume-count 50
32. --shards <x>/<y>
在实例之间拆分扫描。x 是此扫描的 ID,而 y 是实例总数。例如,--shards 1/2 指示实例发送每隔一个数据包,从索引 0 开始。同样,--shards 2/2 发送每隔一个数据包,但从索引 1 开始,这样它就不会与第一个示例重叠。
masscan --range 192.168.174.0/24 -p22 --rate 1000 --shards 1/2
33. --rotate <time>
旋转输出文件,使用当前时间戳重命名,将其移动到单独的目录。时间以秒数指定,例如“3600”表示一小时。或者,可以指定时间单位,例如“ hourly ”或“ 6hours ”或“ 10min ”。时间在偶数边界上对齐,因此如果指定“ daily ”,则文件将在每天午夜旋转。
masscan --range 192.168.174.0/24 -p22 --rate 1000 --rotate 3600
34. --rotate-offset <time>
时间偏移量。这是为了适应时区。
masscan --range 192.168.174.0/24 -p22 --rate 1000 --rotate 3600 --rotate-offset 30min
35. --rotate-dir <directory>
旋转文件时,指定将文件移动到哪个目录。一个有用的目录是 /var/log/masscan。
masscan --range 192.168.174.0/24 -p22 --rate 1000 --rotate 3600 --rotate-dir /var/log/masscan
36. --seed <integer>
为随机数生成器设定种子的整数。使用不同的种子将导致数据包以不同的随机顺序发送。除了整数,还可以指定字符串 time,该字符串使用本地时间戳设定种子,自动生成不同的随机扫描顺序。如果没有指定种子,则 time 为默认值。
masscan --range 192.168.174.0/24 -p22 --rate 1000 --seed 23
37. --regress
运行回归测试,成功时返回“0”,失败时返回“1”。
masscan --regress
38. --ttl <num>
指定传出数据包的 TTL,默认为 255。
masscan --range 192.168.174.0/24 -p22 --rate 1000 --ttl 255
39. --wait <seconds>
指定在传输完成后等待接收数据包的秒数,然后退出程序。默认值为 10 秒。可以指定字符串 forever,表示永不终止。
masscan --range 192.168.174.0/24 -p22 --rate 1000 --wait 10
40. --offline
实际上不传输数据包。这在低速率和 --packet-trace 时很有用,可以查看可能已传输的数据包。或者,使用 --rate 100000000 来测试传输速度(假设零开销驱动程序)。PF_RING 比离线模式的基准测试结果慢约 20%。
masscan 192.168.1.0/24 -p80 --rate=10 --offline --packet-trace
41. -sL
这不会进行扫描,而是创建一个随机地址列表。这对于导入到其他工具中很有用。选项 --shard、--resume-index 和 --resume-count 可以与此功能一起使用。
masscan --range 192.168.174.0/24 -p22 --rate 1000 -sL
42. --interactive
在控制台上实时显示结果。如果与 --output-format 或 --output-filename 一起使用,则无效。
masscan --range 192.168.174.0/24 -p22 --rate 1000 --interactive
43. --output-format <fmt>
表示输出文件的格式,可以是 xml、binary、grepable、list 或 JSON。必须指定选项 --output-filename。
44. --output-filename <filename>
保存结果的文件。如果未指定参数 --output-format,则将使用默认的 xml。
masscan --range 192.168.174.0/24 -p22 --rate 1000 --output-format xml --output-filename output.xml
45. -oB <filename>
将输出格式设置为二进制并将输出保存在给定的文件名中。这相当于使用 --output-format 和 --output-filename 参数。然后可以使用选项 --readscan 读取二进制文件。二进制文件比 XML 等效文件小得多,但需要单独的步骤才能转换回 XML 或其他可读格式。
masscan --range 192.168.174.0/24 -p22 --rate 1000 -oB result
masscan --readscan result
46. -oX <filename>
将输出格式设置为 XML 并将输出保存在给定的文件名中。这相当于使用 --output-format xml 和 --output-filename 参数。
masscan --range 192.168.174.0/24 -p22 --rate 1000 -oX xml_result
47. -oG <filename>
将输出格式设置为 grepable 并将输出保存在给定的文件名中。这相当于使用 --output-format grepable 和 --output-filename 参数。
masscan --range 192.168.174.0/24 -p22 --rate 1000 -oG grepable_result
48. -oJ <filename>
将输出格式设置为 JSON 并将输出保存在给定的文件名中。这相当于使用 --output-format json 和 --output-filename 参数。
masscan --range 192.168.174.0/24 -p22 --rate 1000 -oJ json_result
49. -oL <filename>
将输出格式设置为简单列表格式并将输出保存在给定的文件名中。这相当于使用 --output-format list 和 --output-filename 参数。
masscan --range 192.168.174.0/24 -p22 --rate 1000 -oL list_result
50. --readscan <binary-files>
从扫描中读取由 -oB 选项创建的文件,然后根据命令行参数以其他格式之一输出它们。换句话说,它可以获取输出的二进制版本并将其转换为XML 或 JSON 格式。
masscan --readscan result
简单示例
1. 以下示例扫描所有私有网络中的 Web 服务器,并打印找到的所有开放端口。
masscan 10.0.0.0/8 192.168.0.0/16 172.16.0.0/12 -p80 --open-only
2. 以下示例扫描整个 Internet 中的 DNS 服务器,获取其版本,然后将结果保存在 XML 文件中。
masscan 0.0.0.0/0 --excludefile no-dod.txt -pU:53 --banners --output-filename dns.xml
您应该能够将 XML 导入数据库等。
3. 以下示例读取名为 bin-test.scan 的二进制扫描结果文件,并将结果打印到控制台。
masscan --readscan bin-test.scan
4. 以下示例读取名为 bin-test.scan 的二进制扫描结果文件并创建名为 bin-test.xml 的 XML 输出文件。
masscan --readscan bin-test.scan -oX bin-test.xml
高级示例
1. 假设您要扫描整个互联网并将扫描分散到三台机器上。使用以下命令行可在所有三台机器上启动 Masscan:
masscan 0.0.0.0/0 -p0-65535 --shard 1/3 --seed 100 --exclude 255.255.255.255
masscan 0.0.0.0/0 -p0-65535 --shard 2/3 --seed 100 --exclude 255.255.255.255
masscan 0.0.0.0/0 -p0-65535 --shard 3/3 --seed 100 --exclude 255.255.255.255
2. 另一种方法是使用“恢复”功能。扫描具有内部索引,该索引从零到端口数乘以 IP 地址数。以下示例显示将扫描拆分为每 1000 个项目的块:
masscan 0.0.0.0/0 -p0-65535 --exclude 255.255.255.255 --resume-index 0 --resume-count 1000
masscan 0.0.0.0/0 -p0-65535 --exclude 255.255.255.255 --resume-index 1000 --resume-count 1000
masscan 0.0.0.0/0 -p0-65535 --exclude 255.255.255.255 --resume-index 2000 --resume-count 1000
masscan 0.0.0.0/0 -p0-65535 --exclude 255.255.255.255 --resume-index 3000 --resume-count 1000
脚本可以使用它将较小的任务拆分到许多其他机器上,例如 Amazon EC2 实例。当每个实例完成一项作业时,脚本可能会向中央协调服务器发送请求以完成更多工作。
虚假重置
使用适配器的默认 IP 地址扫描 TCP 时,内置堆栈将生成 RST 数据包。这将防止横幅抓取。有两种方法可以解决这个问题。第一种方法是创建一个防火墙规则,阻止堆栈看到该端口。其工作原理取决于操作系统,但在 Linux 上,它看起来像:
iptables -A INPUT -p tcp -i eth0 --dport 61234 -j DROP
然后,在扫描时,必须使用相同的端口作为源:
masscan 10.0.0.0/8 -p80 --banners --adapter-port 61234
另一种方法是“欺骗”不同的 IP 地址。此 IP 地址必须在本地网络范围内,但不得被您自己的计算机或网络上的其他计算机使用。例如:
masscan 10.0.0.0/8 -p80 --banners --adapter-ip 192.168.1.101
以这种方式设置源 IP 地址是运行此扫描仪的首选方式。
总结
Masscan是一款高效的端口扫描工具,其强大的并发能力和灵活的参数配置适用于大规模网络扫描。合理使用Masscan能极大提升渗透测试效率,但需遵守法律与道德规范,避免滥用。
在此特别强调,本教程仅在合法授权的情况下进行测试和研究,请勿用于其他用途。未经授权使用此类工具可能会侵犯他人隐私,触犯相关法律,任何因此引发的法律或利益纠纷与本人无关。
欢迎各位大佬,小白来找我交流。
更多推荐
所有评论(0)