masscan 完整实战指南:互联网级异步 TCP 端口扫描器的参数详解、配置实践与源码原理

发布时间:2026/9/20 20:25:56
masscan 完整实战指南:互联网级异步 TCP 端口扫描器的参数详解、配置实践与源码原理 网络安全渗透测试CLI【免费下载链接】masscanTCP port scanner, spews SYN packets asynchronously, scanning entire Internet in under 5 minutes.项目地址https://gitcode.com/gh_mirrors/ma/masscan点击查看免费下载导读本文以 doc/masscan.8.markdownmasscan 的 man 手册为骨架系统讲解 masscan —— 一款面向互联网规模Internet-scale大范围资产普查的异步端口扫描器从目标与端口语法、发包速率控制、Banner 抓取、输出格式到配置文件、断点续扫、分片并行再到与操作系统自带协议栈冲突时的规避方案。读完本文你将能够独立完成扫描整个内网/全网、抓取服务 Banner、持久化输出结果、断点续扫与多机分片的完整实战链路并理解其底层基于 BlackRock 加密置换的随机化扫描原理。一、masscan 是什么根据 man 手册的定义masscan是一个互联网规模的端口扫描器适用于对整个互联网或内网的大规模普查large scale surveys。它的默认发包速率只有 100 包/秒但最高可以加速到2500 万包/秒25 million packets/second——按这一速率理论上 3 分钟即可针对单个端口扫完整个 IPv4 互联网README 中则描述为5 分钟内以 1000 万包/秒从单机扫完整个互联网。关键定位来自 README.md使用与nmap相似的用法、参数与输出风格但内部采用异步传输架构与scanrand、unicornscan、ZMap同类并且比它们更灵活——支持任意的端口范围和地址范围组合masscan 拥有自己的ad-hoc TCP/IP 协议栈用户态协议栈与操作系统内核协议栈共存它面向广范围、多主机扫描而设计nmap则面向单机/小范围深扫两者定位互补。注意本文所有速率、兼容性等表述均以本项目仓库中 doc/masscan.8.markdown 与 README.md 的原始声明为准实际吞吐取决于网卡、驱动、CPU 与操作系统。二、构建与安装masscan 除 C 编译器gcc/clang外几乎没有其他依赖。在 Debian/Ubuntu 上sudo apt-get --assume-yes install git make gcc git clone https://github.com/robertdavidgraham/masscan cd masscan make构建产物位于masscan/bin子目录本仓库根目录为bin/masscan。安装到系统make install源码由大量小文件组成多线程构建会显著提速Raspberry Pi 上内存不足 2G 可能失败建议用-j4而非全部线程make -j其他平台构建方式README 原文Windows Visual Studio使用vs10/下的 VS10 工程masscan.vcxprojWindows MinGW直接makemacOS Xcode使用 xcode4/masscan.xcodeprojmacOS 命令行直接makeFreeBSDgmake其他平台尝试一次性编译全部源文件cc src/*.c -o bin/masscan。构建完成后建议先跑一遍内置自检README 中的回归测试小节make test bin/masscan --selftest selftest: success!也可以直接运行 man 手册中提到的--regress选项进行回归测试成功返回 0失败返回 1。三、命令行语法与目标指定man 手册给出的 SYNOPSISmasscan [options] [IP|ranges... -p PORT[,PORT...]]3.1 目标Target的三种写法命令行上任何不以-开头的参数都会被当作 IP 地址或地址范围支持以下三种格式格式示例说明单个 IP192.168.0.1、2001:db8::1IPv4 / IPv6 均可连续范围10.0.0.1-10.0.0.100起止地址用-连接CIDR0.0.0.0/0、2001:db8::/90标准的无类域间路由写法约束与技巧至少必须指定一个目标多个目标可用空格分隔作为多个参数也可用逗号合并为单个参数如masscan 10.0.0.0/8,192.168.0.1,2001:db8::1--range IP|RANGE与上述匿名目标写法等价只是显式命名。3.2 端口指定-p PORT[,PORT...]/--ports PORT[,PORT...]用于指定待扫描端口单端口-p80端口范围-p 20-25端口列表端口与范围混用-p80,20-25UDP 端口使用U:前缀如--ports U:161,U:1024-1100在 src/main-conf.c 的参数解析中ports/port关键字会被统一处理代码中的EQUALS(ports, name)分支并将U:前缀解析为 UDP 端口段--echo输出时也会以U:前缀形式还原fprintf(fp,U:)。3.3 从文件读取目标与排除选项作用-iL FILE/--includefile FILE从文件读取待扫描范围列表格式与命令行目标相同文件可包含数百万条地址/范围--exclude IP|RANGE黑名单一个地址/范围覆盖任何目标设置保证该段绝不会被扫描--excludefile FILE从文件读取排除范围列表同样优先于目标仓库的 data/exclude.conf 就是一个真实的排除列表样例开头按 IANA/RFC 5735 列出保留段0.0.0.0/8、10.0.0.0/8、127.0.0.0/8、192.168.0.0/16、240.0.0.0/4等随后是历史扫描中对方投诉要求拉黑的真实网段如153.11.0.0/16、165.160.0.0/16最后还有建议不要扫描的 DOD / 美国军方网段以及英国 JANET 教育网段。这正体现了 man 手册的建议把排除项放进默认配置文件避免误扫危险地址。3.4 其他目标相关选项--ping在 TCP/UDP 扫描的同时附带 ICMP Echo 请求探测。--source-ip/--adapter-ip见下文网络接口一节。四、扫描控制速率、重试与扫描范围4.1 发包速率--rate RATE--rate指定期望的发包速率支持极小值如0.1每 10 秒发 1 包支持极大值如100000001000 万包/秒。经验参考man 手册原文Windows 约 25 万包/秒新版 Linux 约 250 万包/秒要达到 2500 万包/秒需要 PF_RING 驱动。README 补充默认速率仅 100 包/秒--rate 1000000可提升到 100 万包/秒。注意高速率下对 IPv6 大段扫描会淹没目标网络IPv6 常聚焦单一子网内的数十亿地址不像 IPv4 均匀分布到大量子网导致对方网络崩溃。4.2 重试--retries num指定重试次数每次重试间隔 1 秒。由于 masscan 是无状态stateless扫描器即使已经收到回应重试仍会照发不误——这是与有状态扫描器的本质区别。4.3 随机种子--seed INT为随机数生成器提供种子。不同种子 → 不同的随机扫描顺序。也可以传字符串time用本地时间戳作为种子每次都生成不同顺序未指定时默认即time。--seed在 src/main-conf.c 中以SET_seed保存最终传给blackrock_init()作为置换密钥见 src/main.c 第 261 行。4.4 TTL 与退出等待--ttl NUM出站报文 TTL默认 255。--wait SECONDS发送完毕后等待收包多少秒再退出默认 10 秒传字符串forever则永不终止。4.5 离线模式--offline不真正发包。两种典型用途配合低速率和--packet-trace观察本应发出的报文长什么样配合--rate 100000000做性能基准——衡量假设零开销驱动如 PF_RING时的极限吞吐实测 PF_RING 实际值比离线基准慢约 20%。4.6 仅列出地址-sL不做扫描只生成一串随机地址列表便于导入其他工具。可与--shard、--resume-index、--resume-count组合使用。4.7 回归测试--regress运行回归测试成功返回 0失败返回 1。README 中还提到--selftest自检bin/masscan --selftest二者共同构成项目的质量保障手段此外 VULNINFO.md 记载了漏洞赏金计划项目代码大量使用safe_strcpy()等安全函数替代strcpy()。五、网络接口与源地址控制选项作用与默认值-e IFNAME/--adapter IFNAME指定原始网络接口如eth0、dna1不指定时使用第一个带默认网关的接口--adapter-ip IP/--source-ip IP指定出站报文的源 IP不指定时使用接口上第一个 IP。也可给一个范围——注意范围大小必须是 2 的整数次幂1、2、4、8、16、1024……--adapter-port PORT指定源端口默认在 40000–60000 之间随机选取。建议用主机防火墙如 iptables过滤该端口防止内核协议栈干扰回包。也可给范围如40000-40003大小同样必须是 2 的幂--adapter-mac MAC指定源 MAC默认使用接口绑定的第一个 MAC--adapter-vlan VLANID使用指定的 802.1q VLAN ID 发包--router-mac MAC指定目的 MAC网关不指定时对接口网关做 ARP 解析--iflist列出所有可用网络接口后退出随后可用-e IFNAME选用其一关于多网卡当配置了多块网卡时--echo输出与 resume 文件中会以adapter[0]、adapter[1]这类带索引后缀的参数区分见 src/main-conf.c 的idx_str处理逻辑因此多网卡场景的断点续扫也能完整还原适配器配置。六、Banner 抓取与协议识别6.1--banners建立 TCP 连接后抓取 Banner。支持的协议包括HTTP、FTP、IMAP4、memcached、POP3、SMTP、SSH、SSL、SMB、Telnet、RDP、VNC。两个注意事项Banner 默认只在服务的标准端口上抓取可以通过--hello-string或--hello-file改变这一行为。6.2 连接超时--connection-timeout SECSBanner 检查中单条 TCP 连接可保持的最长时间默认 30 秒。抓取不完整时可调大——例如下载全互联网 SSL 证书链时有些站点需要较长时间才能发完整条链。警告该值调大后快速扫描会消耗大量内存——代码虽可支撑数百万条并发 TCP 连接但你的内存不一定够。6.3 自定义问候--hello-file/--hello-string--hello-file[PORT] FILETCP 连接建立后向该端口发送文件内容需同时开启--banners。程序会对响应做启发式协议识别HTTP 响应与其他协议的解析方式不同。--hello-string[PORT] BASE64与--hello-file相同但内容是 BASE64 编码字符串解码后作为问候语发出。6.4 抓取内容控制--capture/--nocaptureBanner 模式下控制抓取哪些内容默认只抓 HTML 文档的TITLE字段要抓完整文档用--capture htmlSSL 证书默认整条抓取要关闭用--nocapture cert当前仅支持html和cert两个取值未来会增加更多。6.5 自定义 HTTP 头Banner 抓取 HTTP 服务时可深度定制请求头选项作用--http-method替换请求行中的方法--http-url替换请求行中的 URL--http-version替换请求行中的 HTTP 版本--http-host替换Host:头--http-user-agent替换User-Agent:头例如--http-user-agent Keurig K575 Coffee Maker--http-field NAME:VALUE替换已有头部字段字段不存在则插入不能改请求行三要素例如--http-field Accept:image/gif--http-field-remove NAME删除第一个匹配的字段Cookie这类可多次出现的字段可能需要重复删除多次--http-cookie VALUE追加一个Cookie:字段——其他--http-*都是替换这个专用于追加--http-payload STR在头部之后追加负载字符串会自动补上匹配长度的--http-field Content-Length:LEN但Content-Type需要你自己加常用值application/x-www-form-urlencoded、application/json、text/xml通常还要配合--http-method POST使用6.6 UDP 负载注入--pcap-payloads FILE从 libpcap 抓包文件读取 UDP 报文提取其负载并按目的端口关联记忆每端口只记一条后续向该端口发送 UDP 报文时自动携带该负载--nmap-payloads FILE读取与 nmap 的nmap-payloads同格式的文件得到各端口的 UDP 负载避免发出空负载的 UDP 报文。两者功能相似可互为替代。仓库中 data/afl-http.pcap 与 data/flush_all.pcap 即为可用于载荷分析的抓包样例。七、输出格式、文件与实时展示7.1 状态筛选--show [open|closed]指定要显示哪种端口状态——TCP 回 SYN-ACK 的记为open回 RST 的记为closed。默认只显示open。--noshow [open|closed]关闭某类状态的显示如不再显示open。7.2 五种输出格式--output-format FMT支持xml、binary、grepable、list、JSON五种注意--output-filename必须同时指定也可以直接用快捷键快捷键等价写法说明-oB FILE--output-format binary--output-filename二进制格式文件远小于 XML需用--readscan事后转回可读格式-oX FILE--output-format xml--output-filenameXML便于导入数据库-oG FILE--output-format grepable--output-filenamenmap-oG风格的 grepable 格式便于命令行工具解析-oJ FILE--output-format json--output-filenameJSON-oL FILE--output-format list--output-filename每行一个主机:端口对list格式的行结构为port state protocol port number IP address POSIX timestamp open tcp 80 XXX.XXX.XXX.XXX 13903800647.3 二进制结果回放--readscan FILE读取-oB生成的二进制结果文件再按命令行参数转成其他格式——例如把二进制转成 XML 或 JSON。注意使用该选项时/etc/masscan/masscan.conf的默认配置将不会被读取。7.4 输出文件管理--append-output结果追加到文件而非覆盖配合--resume续扫时很有用--rotate TIME按时间轮转输出文件用时间戳重命名并移入独立目录。时间可用秒数3600或单位hourly、6hours、10min。轮转对齐到整数边界——daily会在每天午夜轮转--rotate-offset TIME轮转的时间偏移用于适配时区--rotate-size SIZE文件超过指定大小即轮转支持k/m/g/t后缀--rotate-dir DIR轮转时文件移入的目录推荐/var/log/masscan。7.5 收包与追踪--pcap FILE把收到的报文不含发出的报文保存为 libpcap 格式文件--packet-trace逐包打印收发摘要——低速率每秒几包时很有用高速率下会刷爆终端--interactive在控制台实时显示结果与--output-format/--output-filename同时使用时无效。八、配置文件格式、默认路径与 echo8.1 加载方式-c FILE/--conf FILE读取配置文件未指定时默认读取/etc/masscan/masscan.conf--resume FILE与--conf相同但会自动设置--append-output等少数选项用于恢复被 Ctrl-C 中断的扫描见下文--echo不执行扫描而是把当前配置整体 dump 成配置文件之后可用-c加载回用。README 中给出了一个典型工作流# masscan -p80,8000-8100 10.0.0.0/8 2603:3001:2d00:da00::/112 --echo xxx.conf # masscan -c xxx.conf --rate 10008.2 文件格式配置文件使用与命令行相同的参数名但去掉--前缀并用连接名称与值。man 手册给出的完整示例# targets range 10.0.0.0/8,192.168.0.0/16 range 172.16.0.0/12 ports 20-25,80,U:53 ping true # adapter adapter eth0 adapter-ip 192.168.0.1 router-mac 66-55-44-33-22-11 # other exclude-file /etc/masscan/exludes.txt要点range可写多行等价于多个目标ports同样支持U:UDP 前缀默认配置/etc/masscan/masscan.conf适合存放系统相关设置如adapter-xxx系列和排除地址——这样即使扫描全网也会自动跳过危险网段如美军/DoD 网段避免误操作。README 中的全网扫描配置示例可直接存为myscan.conf# My Scan rate 100000.00 output-format xml output-status all output-filename scan.xml ports 0-65535 range 0.0.0.0-255.255.255.255 excludefile exclude.txt使用# masscan -c myscan.conf。README 特别强调masscan 启动时先加载/etc/masscan/masscan.conf之后出现的配置参数会覆盖默认配置——因此把excludefile放进默认配置文件里就能永远自动生效、永不忘记。从源码看src/main-conf.cmasscan_echo()会完整还原各项参数rate %f、resume-index、seed等参数表同时登记了别名rate的别名是max-rateshard的别名是shards。这解释了为什么 README 示例中--max-rate与 man 手册的--rate都能使用。九、Ctrl-C 行为与断点续扫9.1 中断与恢复按下ctrl-c后扫描停止当前扫描状态保存到paused.conf程序不会立即退出而是默认再等 10 秒接收互联网上的回报并保存结果之后才完全退出——等待时间可用--wait调整。恢复扫描# masscan --resume paused.conf从源码验证发送线程检测到min_index count_ips * count_ports扫描未完成时会记录masscan-resume.index min_index并调用masscan_save_state()见 src/main.c 第 1447-1451 行而masscan_save_state()在 src/main-conf.c 中把状态写入paused.conf并打印saving resume file to: paused.conf。也就是说paused.conf本质上是当前完整配置 断点索引的 echo 快照。9.2 分段参数--resume-index INDEX扫描暂停时的位置点--resume-count NUM退出前最多发送的探测包数量。两者配合可以把一次扫描切成任意小块交给不同实例执行分片方式见下文。十、多机并行shards 与 resume 切分man 手册给出了把全网扫描分摊到三台机器的经典做法# masscan 0.0.0.0/0 -p0-65535 --shard 1/3 # masscan 0.0.0.0/0 -p0-65535 --shard 2/3 # masscan 0.0.0.0/0 -p0-65535 --shard 3/3--shards X/Y注意别名为--shard的含义x是当前实例编号y是实例总数。例如--shards 1/2表示从索引 0 开始每隔一个包发一个--shards 2/2表示从索引 1 开始每隔一个包发一个与前者不重叠。源码佐证src/main.c发送线程的起点为start masscan-resume.index (masscan-shard.one-1) * masscan-nic_count parms-nic_index循环中i increment其中increment masscan-shard.of * masscan-nic_count——可见 shards 与多网卡nic_count在索引空间上是统一的既可以多机分片也可以同一台机器多网卡分片。另一种切分方式利用内部索引一次扫描的内部索引从 0 到端口数 × IP 数配合--resume-index与--resume-count可切成任意大小的块# masscan 0.0.0.0/0 -p0-65535 --resume-index 0 --resume-count 1000 # masscan 0.0.0.0/0 -p0-65535 --resume-index 1000 --resume-count 1000 # masscan 0.0.0.0/0 -p0-65535 --resume-index 2000 --resume-count 1000 # masscan 0.0.0.0/0 -p0-65535 --resume-index 3000 --resume-count 1000脚本可以借此把大批量小任务分发到多台机器如 EC2 实例上每完成一个任务块就向中央协调服务器申请下一块工作。十一、用户态协议栈与虚假 RST问题11.1 问题根源masscan 内置了与操作系统协议栈并存的用户态 TCP/IP 协议栈。多数场景下相安无事但使用--banners建立真实 TCP 连接时容易出问题如果 masscan 的源 IP 与操作系统相同内核收到被探测方回应的 SYN-ACK 后会认为这是别人的连接随即发出RST 包把连接掐断在 Banner 抓取之前。最坏情况下可能要求把协议栈的全部参数都单独指定--adapter-port PORT --adapter-ip IP --adapter-mac MAC --adapter-vlan VLANID --router-mac MAC11.2 解法一防火墙过滤源端口Linux iptables 示例# iptables -A INPUT -i eth0 -p tcp --dport 44444 -j DROP这条规则让 Linux 内核不再处理发往 44444 端口的入站报文但 masscan 绕过内核协议栈仍然能收到。随后用--adapter-port 44444强制 masscan 使用该端口作为源端口# masscan 10.0.0.0/8 -p80 --banners --adapter-port 61234man 手册SPURIOUS RESETS一节给出的等价示例# iptables -A INPUT -p tcp -i eth0 --dport 61234 -j DROP # masscan 10.0.0.0/8 -p80 --banners --adapter-port 6123411.3 解法二伪造spoof一个空闲源 IP源 IP 必须落在本网段内、且没有被本机或其他机器占用# masscan 10.0.0.0/8 -p80 --banners --adapter-ip 192.168.1.101man 手册明确表示这样设置源 IP 是运行本扫描器的首选方式preferred way。README 补充了选端口的实操细节Linux 的临时端口范围可查/可改/proc/sys/net/ipv4/ip_local_port_rangeKali 2018-08 上为 32768–60999应选择低于 32768 或高于 60999 的端口iptables规则重启后失效需按发行版用iptables-save/iptables-persistent持久化macOS/BSD 用sysctl net.inet.ip.portrange.first net.inet.ip.portrange.last查看端口范围FreeBSD/旧版 macOS 用ipfwsudo ipfw add 1 deny tcp from any to any 40000 in新版 macOS/OpenBSD 用pf在/etc/pf.conf加block in proto tcp from any to any port 40000:40015再用pfctl -E开启或pfctl -f /etc/pf.conf重载Windows 内核不会回 RST两种技巧都不需要但仍建议尽可能使用独立 IP--heartbleed这类检查本质上是 Banner 检查的一种同样需要上述处理。十二、简单示例与实战命令man 手册的入门示例可直接复现1. 扫描全部私网段找 Web 服务器只显示 open 端口# masscan 10.0.0.0/8 192.168.0.0/16 172.16.0.0/12 -p80 --open-only2. 扫描整个互联网的 DNS 服务器UDP 53抓取版本并保存 XML# masscan 0.0.0.0/0 --excludefile no-dod.txt -pU:53 --banners --output-filename dns.xmlXML 结果可直接导入数据库。3. 回放二进制结果到控制台# masscan --readscan bin-test.scan4. 二进制结果转 XML# masscan --readscan bin-test.scan -oX bin-test.xmlREADME 中的组合示例同时扫 IPv4 与 IPv6 网段# masscan -p80,8000-8100 10.0.0.0/8 2603:3001:2d00:da00::/112该命令会扫描10.x.x.x与2603:3001:2d00:da00::x两个子网上的 80 端口及 8000–8100共 102 个端口结果打印到 stdout 可重定向到文件。README 强调IPv4/IPv6 没有独立模式可同时混扫输出位置与格式一致没有-6选项。全网扫描的完整姿势README# masscan 0.0.0.0/0 -p0-65535 --excludefile exclude.txt --max-rate 100000 -oX scan.xml注意masscan 默认启用了一组与 nmap 兼容的隐形选项-sS -Pn -n --randomize-hosts --send-eth。与 nmap 的两点关键差异没有默认端口必须显式-p目标只能是 IP/简单范围不接受 DNS 名或 nmap 的10.0.0-255.0-255式写法。想查看全部 nmap 兼容选项运行# masscan --nmap十三、性能基准与 IPv6 注意事项13.1 基准测试README 的性能测试小节给出了两个避免打爆本地路由器的基准方法# 方法一伪造 router-mac让报文留在本地网段 $ bin/masscan 0.0.0.0/4 -p80 --rate 100000000 --router-mac 66-55-44-33-22-11 # 方法二离线模式衡量去掉发包开销后的纯程序吞吐 $ bin/masscan 0.0.0.0/4 -p80 --rate 100000000 --offline第二个基准近似 PF_RING近零开销下的运行速度。README 还提到随机化算法重度依赖整数运算现代 CPU 将整数除法速度翻倍直接让 masscan 变得更快。13.2 速率警告README 的Transmit rate (IMPORTANT!!)一节Windows/虚拟机约 30 万包/秒Linux非虚拟化约 160 万包/秒——足以融化多数网络。它只可能淹没你自己的网络目标 IP 已随机化不会冲垮远端网络。IPv4 扫描因为遍布大量子网每个子网收到的流量很小而 IPv6 常聚焦单一子网默认行为会压垮目标网络。13.3 IPv6 建议不要在 IPv6 上扫大段地址如确需扫描只扫一个子网内前 64k 个如 DHCPv6 分配的地址更推荐把大量 IPv6 地址写入文件用--include-file filename.txt扫描该文件可同时混含 IPv4/IPv6README 的测试文件有 800 万条地址启动时需要多花几秒排序去重运行 masscan 的本机不需要启用 IPv6——只需本地网络能路由 IPv6 报文。13.4 PF_RING 高速驱动要突破约 200 万包/秒需要 Intel 10Gbps 网卡和 ntop 的 PF_RING ZC 驱动。masscan无需重新编译即可使用 PF_RING但需要装齐libpfring.so安装到/usr/lib/libpfring.sopf_ring.ko内核驱动ixgbe.ko其 Intel 10G 网卡驱动版本无需构建他们的libpcap.so。当网卡名是zc:enp1s0这类前缀而非普通enp1s0时masscan 会自动切换 PF_RING ZC 模式。--pfring选项可强制使用 PF_RING 驱动驱动不可用则直接退出。十四、源码级原理异步架构与 BlackRock 随机化14.1 异步收发线程README.md 的 Design 章节与 src/main.c 一致表明main()中扁平化、注释详尽的transmit_thread()与receive_thread()相互独立构成异步架构对 nmap 而言如同 nginx 之于 Apache。因为无状态、异步扫描速度完全取决于底层发包能力。14.2 单索引 加密置换扫描的核心是一个从 0 递增到range ip_count * port_count的索引变量range ip_count * port_count; for (i 0; i range; i) { x encrypt(i); // BlackRock 置换 ip pick(addresses, x / port_count); port pick(ports, x % port_count); scan(ip, port); }其中pick()负责把索引翻译成 IP用二分搜索在内存中查找注意缓存效率除法和取模约 90 个时钟周期30ns而 1000 万包/秒下每包只有 100ns 预算——两个除法可并行执行所以做两个不比做一个贵。随机化的方式是对索引做加密加密天然是随机且 1:1的线性递增的索引经加密后输出完全随机从而把流量均匀铺开避免集中轰炸某个目标网络。这一置换正是由 src/crypto-blackrock.c 实现的BlackRock 密码Feistel 网络基于 Black Rogaway 的《Ciphers with Arbitrary Finite Domains》论文给定[0..N]内任意大小的域它产出同域内不重复的随机映射。因为只关心速度不关心密码学强度内部READ()函数刻意做得极简并带一个 256 字节 S-box。源码注释明确给出了它在扫描中的用途——randomize the sequence。这一架构带来的能力README Design 章节shards多机/多网卡/多源 IP 分摊扫描各做range / shard_countseed作为加密密钥改变扫描顺序x encrypt(seed, i)断点续扫记住当前i即可开发者在修 bug 时反复 Ctrl-C/重启重传以i rate作为重传索引天然实现约 1 秒后重发。14.3 C10M 扩展性masscan 面向 C10M千万级并发连接设计三大内核绕过手段自定义网络驱动PF_RING DNA 直接 DMA绕过内核8 块 10Gbps 网卡可支撑每秒上亿包用户态 TCP 协议栈轻松支撑 1000 万并发 TCP 连接前提是内存足够用户态同步不使用互斥锁mutex改用 ring 队列同步收发线程避免缓存行颠簸与内核 syscall。14.4 可移植性代码以标准 C90 编写可运行于 Linux、Windows、macOSVisual Studio / Clang / GCC 均可编译。Windows/macOS 未针对发包调优约 30 万包/秒Linux 约 150 万包/秒。十五、合规与滥用投诉man 手册的 ABUSE COMPLAINTS 一节值得全文重视本工具面向大规模普查扫描行为一定会被对方日志记录并引发投诉扫描自己所在组织可能导致被解雇未经老板书面同意永远不要扫描本地子网之外的范围用雇主网络扫描互联网同样容易被解雇在家用/ISP 网络上扫描可能因投诉被取消账户可行的做法与 ISP 沟通清楚研究意图研究互联网而非入侵让 ISP 把投诉直接转给你对任何提出异议的对象将其加入--excludefile永久黑名单不再扫描有人也会反过来把你加入白名单让防火墙不再记录你的扫描日志——当然仍会拦截作者的结论互联网虽是公开端到端网络但扫描者总是有罪推定这一问题无法彻底解决。data/exclude.conf 中保留的投诉邮件原文General Dynamics、EGI Hosting、Utah State University 等就是这一现实的真实注脚也解释了为何排除列表是全网扫描的第一道安全阀。十六、快速参考选项总览类别选项目标IP|RANGE、--range、-iL/--includefile、--exclude、--excludefile、--ping端口-p/--ports支持U:UDP 前缀速率/行为--rate、--retries、--seed、--ttl、--wait、--offline、-sL、--regress、--pfring适配器-e/--adapter、--adapter-ip/--source-ip、--adapter-port、--adapter-mac、--adapter-vlan、--router-mac、--iflistBanner--banners、--connection-timeout、--hello-file[PORT]、--hello-string[PORT]、--capture/--nocaptureHTTP 定制--http-method/url/version/host/user-agent、--http-field、--http-field-remove、--http-cookie、--http-payload载荷--pcap-payloads、--nmap-payloads输出--show/--noshow、--interactive、--output-format、--output-filename、-oB/-oX/-oG/-oJ/-oL、--readscan、--append-output、--rotate*、--pcap、--packet-trace配置/续扫-c/--conf、--echo、--resume、--resume-index、--resume-count、--shards X/Y其他--nmap十七、延伸阅读手册正文doc/masscan.8.markdown本文骨架与 doc/masscan.8roff 格式项目总览与设计README.md配置解析与 echo/resume 实现src/main-conf.c收发线程与 shards/resume 逻辑src/main.c随机化置换算法src/crypto-blackrock.c真实排除列表样例data/exclude.conf常见问题速率、丢包、排除列表、服务端日志doc/faq/README.md安全漏洞信息与赏金计划VULNINFO.md免责声明masscan 是高速扫描工具仅应在获得明确授权的前提下用于自己的网络或合规的资产普查场景。高速率、大范围的扫描可能违反服务条款、触发安全告警并带来法律风险请务必参照上文合规与滥用投诉一节谨慎使用。赞分享网络安全渗透测试CLI【免费下载链接】masscanTCP port scanner, spews SYN packets asynchronously, scanning entire Internet in under 5 minutes.项目地址https://gitcode.com/gh_mirrors/ma/masscan点击查看免费下载相关推荐Masscan5分钟扫描整个互联网的终极端口扫描器Masscan5分钟扫描整个互联网的终极端口扫描器 Masscan 是一款高性能的互联网级 TCP 端口扫描器能够在短短5分钟内完成对整个互联网的扫描。作为网络安全渗透测试CLIMasscan项目推荐互联网级端口扫描的终极利器Masscan项目推荐互联网级端口扫描的终极利器 Masscan 是一款互联网级别的端口扫描工具能够异步发送SYN数据包在短短5分钟内完成对整个互联网的扫网络安全渗透测试CLI如何使用Masscan5分钟扫描整个互联网的终极端口扫描工具教程如何使用Masscan5分钟扫描整个互联网的终极端口扫描工具教程 Masscan是一款高性能的TCP端口扫描工具能够异步发送SYN数据包在短短5分钟内完成网络安全渗透测试CLI上一篇Frappe Gantt 完整贡献指南从发现问题到成功提交PR的终极流程下一篇PicoC三千五百行C解释器快速上手创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考