OneForAll与Masscan在子域名收集中的技术原理是什么?

2 人参与

渗透测试的早期阶段,获取目标的全部子域名往往决定后续工作能否顺利展开。OneForAll 与 Masscan 组合已经成为业界常用的“子域名‑端口”双引擎,它们各自的技术实现细节值得细细剖析。

OneForAll的工作机制

OneForAll 采用模块化的字典爆破与搜索引擎查询相结合的方式。核心流程可以概括为:

  • 加载本地子域名前缀列表(常见的 10 万+ 前缀),并根据目标根域名动态拼接。
  • 并发向 DNS 解析器发送 A/AAAA 查询,利用 asyncio 实现每秒上万次请求的吞吐。
  • 对解析成功的记录继续向公开的搜索引擎(如 Google、Bing)发起 site:domain 查询,收集搜索结果中出现的子域名。
  • 将 DNS 与搜索引擎得到的子域名做交叉去重,输出统一的 .txt 文件供后续工具使用。
# 示例:快速枚举 example.com
oneforall -d example.com -t 5000 -o subdomains.txt

值得注意的是,OneForAll 在 DNS 查询阶段会自动切换公共 DNS(如 1.1.1.1、8.8.8.8)与本地 DNS,确保在单一解析器被限速时仍能保持高可用。

Masscan的高速端口扫描

Masscan 之所以能在几秒钟内扫遍 65535 端口,归功于两大技术点:原始套接字的零拷贝发送和自研的位图过滤器。它直接在网络层构造 SYN 包,省去操作系统的 TCP 栈处理,从而实现每秒数百万个包的速率。

  • 用户通过 -p0-65535 指定全端口范围,或用逗号分隔的自定义列表。
  • 使用 --rate 参数控制每秒发送的包数,典型值在 500k~1M 之间。
  • 响应捕获后立即映射到位图,去除重复,最终生成 jsongrepable 格式的报告。
# 对子域名列表进行 80、443 端口快速探测
masscan -iL subdomains.txt -p80,443 --rate 800000 -oJ result.json

Masscan 还内置了对 ICMP 响应的过滤,可在扫描前先排除明显不可达的 IP,进一步提升有效扫描比例。

两者在子域名收集链路中的协同

在典型的自动化脚本中,OneForAll 负责把根域名拆解成完整的子域名清单;随后将该清单喂给 Masscan,后者在每个子域名对应的 IP 上执行高并发 SYN 扫描,快速定位开放的 HTTP/HTTPS 端口。这样一来,原本需要手工迭代数十次的“子域名‑端口‑服务”三层循环,被压缩成两步并行操作。

实际使用中,常见的优化策略包括:在 OneForAll 的输出中去除已知 CDN 域名,以免 Masscan 对大流量节点进行冗余扫描;以及在 Masscan 前加入 --source-port 随机化,以降低被防火墙过滤的概率。

参与讨论

2 条评论
  • 荒原独狼

    这工具组合用起来确实快,之前扫一个站十分钟都搞不完,现在几分钟完事👍

    回复
  • 船夫秦

    求问这个在内网环境下能用吗?感觉防火墙一拦就歇菜了

    回复