rsubdomain
基于 Rust 实现的高性能子域名暴破工具,实现原理参考 ksubdomain
为什么选择rsubdomain
- 🚀 高性能: 直接构造 DNS 报文,结合链路层发包与 UDP 兼容模式,支持高并发
- 🔍 功能丰富: 支持子域名发现、HTTP/HTTPS验证、DNS记录解析
- 📊 多格式输出: 支持JSON、XML、CSV、TXT四种输出格式
- 🌐 智能网络: 自动检测网络设备,支持手动指定网络接口
- 📈 网速测试: 内置DNS包发送速度测试功能
- 🎯 泛解析检测: 支持泛解析检测与过滤,可按需跳过
- 📋 实时统计: 提供详细的汇总统计信息
安装要求
本项目不直接依赖 Linux/macOS 上的 libpcap 开发包,主要依赖 Rust 工具链和系统原生网络接口能力。
Linux/macOS
- 安装可用的 Rust 工具链。
- 确保当前环境允许访问链路层发包/收包接口。
macOS 额外说明:
- 高性能发包/收包路径会访问系统的 BPF 设备。
- 未配置 BPF 设备权限时,通常需要使用
sudo运行。 - 如果已安装 Wireshark 的
ChmodBPF/chmodbpf组件,并且当前用户具备对应的 BPF 设备访问权限,则可以直接使用普通用户运行,无需root。
Windows
需要安装以下组件:
- 使用MSVC工具链的Rust版本
- 安装 WinPcap 或 npcap (推荐npcap,需选择WinPcap兼容模式)
- 从 WinPcap Developers 下载
Packet.lib并放置在项目根目录的lib文件夹中
编译安装
使用方法
基本用法
# 基本子域名扫描
# 直接指定 DNS 解析器
# 使用自定义字典文件
# 从文件读取目标域名
# 从标准输入读取目标域名
|
# 排除不想扫描的域名
# 从文件批量排除域名
# 从文件读取DNS解析器
# 自定义运行期控制
# 指定多种查询类型
# 跳过泛解析检测与过滤
# 静默模式(只输出发现的域名)
# 扫描多个域名
网络功能
# 列出所有网络接口
# 网速测试(默认目标8.8.8.8)
# 指定目标IP进行网速测试
# 手动指定网络设备
# 带宽限制
验证和解析功能
# HTTP/HTTPS验证模式
# DNS记录解析
# 输出原始逐记录结果
# 同时启用验证和解析
# 聚合视图中关闭 CDN 识别
# 聚合视图中保留 CDN 的全部 A/AAAA 记录
# 输出带 CDN 统计的资产视图
输出和统计
# 显示汇总统计
# 导出为JSON格式
# 导出为CSV格式
# 导出为XML格式
# 导出为TXT格式
# 导出包含查询类型的多记录扫描结果
高级用法
# 完整功能组合使用
CDN 资产视图
- 默认输出偏向资产归属视角,只展示域名自身的直接记录,不展开
CNAME -> A/AAAA链路。 - 默认展示的是聚合域名视图;如果需要逐条记录,请使用
--raw-records。 - 命中 CDN 后,聚合域名会标记为
CDN(confidence): provider。 - CDN 命中后,聚合视图默认把
A/AAAA收敛成 1 条代表值,同时保留raw_record_count作为真实记录数。 - 如果你要看 CDN 后面的全部入口地址,使用
--no-cdn-collapse;如果要完全关闭识别,使用--no-cdn-detect。
CDN 识别证据
CNAME:高价值别名证据,最适合识别典型 CDN 接入域名。NS:权威 DNS 指向 CDN 体系时可直接命中。PTR:适合识别直挂 CDN 的A/AAAA记录,需要--resolve-records才能补充这类证据。IP_RANGE:适合识别没有明显PTR的 CDN 直挂 IP。MULTI_A/MULTI_AAAA:弱信号,只表示一个主机名返回了多个 IP,可能是 CDN,也可能只是负载均衡或多机房。
CDN 置信度
high:CNAME/NS后缀规则命中,或PTR + IP_RANGE同时命中。medium:仅PTR或仅IP_RANGE命中。low:仅弱名称模式命中。
疑似 CDN
has_cdn只用于强/中证据命中的明确 CDN 判定。possible_cdn只用于弱信号命中,目前包括MULTI_A和MULTI_AAAA。possible_cdn不会触发 CDN IP 收敛,也不会计入CDN域名数量。
CDN 规则文件
data/cdn_rules.txt每行格式:Provider,suffix:example.cdn.net,contains:.vendor.data/cdn_ip_ranges.txt每行格式:Provider,203.0.113.0/24suffix:走严格后缀匹配,避免把相似域名误识别成同一 CDN。contains:只适合少数需要子串命中的模式。
命令行参数详解
| 参数 | 长参数 | 描述 | 默认值 |
|---|---|---|---|
-d |
--domain |
需要扫描的目标域名(可多个) | 与 --domain-file / --stdin 三选一即可 |
--domain-file |
从文件读取目标域名,每行一个 | - | |
--stdin |
从标准输入读取目标域名,每行一个 | false | |
--exclude-domain |
排除的目标域名,可逗号分隔 | - | |
--exclude-domain-file |
从文件读取排除域名,每行一个 | - | |
-l |
--list-network |
列出所有网络接口 | - |
-r |
--resolvers |
直接指定 DNS 解析器 IP,可重复传入 | 内置公共 DNS 列表 |
--resolver-file |
从文件读取DNS解析器,每行一个 | - | |
-s |
--silent |
静默模式,只输出域名(兼容历史拼写 --slient) |
false |
-f |
--file |
自定义字典文件路径 | 内置字典 |
-w |
--skip-wildcard |
跳过泛解析检测与过滤 | false |
-n |
--network-test |
执行网速测试 | - |
--target-ip |
网速测试目标IP | 8.8.8.8 | |
-b |
--bandwidth |
带宽限制 (K/M/G) | 3M |
-v |
--verify |
HTTP/HTTPS验证模式 | - |
--retry |
DNS查询超时后的最大重试次数 | 5 | |
--wait-seconds |
发包完成后的最大等待时间(秒) | 10 | |
--verify-timeout |
HTTP/HTTPS验证超时时间(秒) | 10 | |
--verify-concurrency |
HTTP/HTTPS验证并发度 | 50 | |
--resolve-records |
解析DNS记录 | - | |
--cdn-detect |
显式开启聚合视图中的 CDN 识别 | true | |
--no-cdn-detect |
关闭聚合视图中的 CDN 识别 | false | |
--cdn-collapse |
显式开启 CDN A/AAAA 收敛 |
true | |
--no-cdn-collapse |
在聚合视图中保留 CDN 的全部 A/AAAA |
false | |
--qtype |
主动发送的查询类型,可逗号分隔 (a/aaaa/cname/mx/ns/txt) | a | |
-e |
--device |
手动指定网络设备 | 自动检测 |
-o |
--output |
输出文件路径 | - |
--format |
输出格式 (json/xml/csv/txt) | json | |
--summary |
显示汇总统计 | - | |
--raw-records |
实时输出逐条DNS记录,而不是聚合视图 | false |
输出示例
标准输出
域名 标签 记录类型 记录值
----------------------------------------------------------------------------------------------------
www.example.com CDN(high): Cloudflare A 104.16.132.229
mail.example.com - MX 10 mail.example.com
static.example.com CDN(medium): Tencent Cloud CNAME static.example.com.cdn.dnsv1.com
验证结果输出
域名 IP地址 HTTP HTTPS 标题 存活
------------------------------------------------------------------------------------------
www.example.com 93.184.216.34 200 200 Example Domain YES
api.example.com 93.184.216.35 404 N/A N/A NO
汇总统计
============================================================
汇总统计
============================================================
发现记录总数: 156
唯一域名数量: 98
唯一IP数量: 23
已验证域名: 45
CDN域名数量: 18
存活域名: 32
记录类型分布:
A: 134
CNAME: 18
MX: 4
CDN提供商分布:
Cloudflare: 10
Tencent Cloud CDN: 8
CDN置信度分布:
high: 15
medium: 3
IP段分布 (前10个):
93.184.216.0/24: 12 个IP
192.168.1.0/24: 8 个IP
10.0.0.0/24: 5 个IP
性能特点
- 高并发: 支持数万并发DNS查询
- 智能重试: 自动处理DNS查询超时和失败
- 带宽控制: 可限制发送速度避免网络拥塞
- 内存优化: 高效的数据结构减少内存占用
- 实时输出: 边扫描边输出,无需等待完成
技术实现
- 报文构造: 直接构造和解析 DNS 报文
- 网络发送: 优先使用链路层通道,在无可用 MAC 的接口上回退到 UDP 兼容模式
- 异步编排: 基于 Tokio 协调任务和结果处理
- 智能解析: 正确解析各种DNS记录类型
- 网络检测: 自动识别最佳网络接口
- 数据导出: 支持多种结构化数据格式
注意事项
- 权限要求: 高性能模式会直接访问链路层发包/收包接口。Linux 通常仍需要
root或等效能力;macOS 在未配置 BPF 设备权限时通常需要sudo,安装 Wireshark 的ChmodBPF/chmodbpf并赋予当前用户访问权限后可直接以普通用户运行 - 防火墙: 确保DNS流量(UDP 53端口)未被阻止
- 网络环境: 建议在稳定的网络环境下使用
- 目标限制: 请合理使用,避免对目标造成压力
- 法律合规: 仅用于授权的安全测试
更新日志
v1.2.14 (最新)
- 🐛 修复大字典扫描结束后主线程栈溢出导致进程 abort 的问题
- 🐛 修复超时处理和重试关闭阶段的竞态告警噪音
- ⚡ 将待响应状态从全表扫描改为到期队列,降低大规模扫描 CPU 开销
- ⚡ 引入基于 RTT 的动态 DNS 超时和解析器健康评分
- ⚡ 将重试调度调整为首轮发送完成后启动,避免边首发边重试的放大效应
- ⚡ 为
raw-records增加批量缓冲输出,减少 stdout 反压 - ⚡ 优化 Ethernet 接收路径,避免无效整包拷贝
- 📚 更新 CLI、README、示例和库导出说明
v1.2.13
- 🐛 修复API中
send_dns_queries方法参数不匹配问题 - 🐛 修复带宽限制器创建和使用逻辑
- 🐛 修复超时域名处理中的变量借用问题
- 🐛 修复资源清理时机导致结果丢失的问题
- ⚡ 优化DNS查询发送逻辑,支持文件和列表两种模式
- ⚡ 改进超时和重试处理机制
- 📚 更新API文档和使用示例
- 🔧 增强错误处理和状态管理
v1.2.3
- 🐛 修复多个API稳定性问题
- ⚡ 优化内存使用和性能
v1.2.0
- ✨ 新增HTTP/HTTPS验证功能
- ✨ 新增DNS记录解析功能
- ✨ 新增多格式输出支持(JSON/XML/CSV/TXT)
- ✨ 新增网速测试功能
- ✨ 新增手动指定网络设备
- ✨ 新增汇总统计功能
- 🐛 修复DNS记录解析显示问题
- 🐛 修复CNAME、MX、TXT记录解析异常
- ⚡ 优化异步处理性能
- 📊 增强实时输出和表格显示
v1.1.0
- ✨ 新增泛解析检测
- ✨ 新增带宽限制功能
- 🐛 修复多域名扫描问题
- ⚡ 优化内存使用
v1.0.0
- 🎉 初始版本发布
- ✨ 基本子域名暴破功能
- ✨ 自动网络设备检测
作为库使用
rsubdomain不仅可以作为命令行工具使用,还可以作为Rust库集成到你的项目中。
添加依赖
在你的Cargo.toml中添加依赖:
[]
# 从 crates.io
= "1.2.14"
# 或从本地路径 / Git 仓库
# rsubdomain = { path = "/path/to/rsubdomain" }
# rsubdomain = { git = "https://github.com/o0x1024/rsubdomain" }
# 异步运行时(必需)
= { = "1.0", = ["full"] }
如果你只想把它当作库引用,而不需要 CLI / HTTP 验证 / DNS 记录解析 / 导出 / 网速测试能力,可以关闭默认特性:
[]
= { = "1.2.14", = false }
= { = "1.0", = ["full"] }
快速开始
use ;
async
高级配置
use ;
async
API 参考
主要结构体
SubdomainBruteConfig - 暴破配置
domains: Vec<String>- 目标域名列表 可由-d、--domain-file、--stdin组合输入,并在 CLI 层做去重和排除过滤resolvers: Vec<String>- DNS服务器列表 可由-r和--resolver-file组合输入,CLI 层会做归一化和去重dictionary_file: Option<String>- 字典文件路径skip_wildcard: bool- 是否跳过泛解析检测bandwidth_limit: Option<String>- 带宽限制verify_mode: bool- 是否启用HTTP/HTTPS验证max_retries: u8- DNS超时后的最大重试次数max_wait_seconds: u64- 发包结束后的最大等待时间verify_timeout_seconds: u64- HTTP/HTTPS验证超时时间verify_concurrency: usize- HTTP/HTTPS验证并发度resolve_records: bool- 是否解析DNS记录cdn_detect: bool- 是否在聚合资产视图中识别CDNcdn_collapse: bool- 是否在聚合资产视图中收敛CDN的多IPquery_types: Vec<QueryType>- 主动发送的DNS查询类型silent: bool- 静默模式raw_records: bool- 是否输出原始逐记录结果device: Option<String>- 网络设备名称
SubdomainResult - 暴破结果
domain: String- 发现的域名value: String- 对应的记录值,可能是 IP、CNAME 目标、MX 内容或 TXT 文本query_type: QueryType- 主动查询类型record_type: String- DNS记录类型verified: Option<VerifyResult>- HTTP/HTTPS验证结果dns_records: Option<DnsResolveResult>- DNS记录解析结果
SubdomainScanData - 从 SubdomainResult 派生出的汇总视图
raw_results: Vec<SubdomainResult>- 保真原始扫描结果,适合 JSON 导出discovered_domains: Vec<DiscoveredDomain>- 可展示/导出的发现结果aggregated_domains: Vec<AggregatedDiscoveredDomain>- 按域名聚合后的展示结果,包含has_cdn/cdn_provider/cdn_confidence/cdn_evidenceverification_results: Vec<VerificationResult>- HTTP/HTTPS验证结果列表summary: SummaryStats- 汇总统计,包含 CDN 数量、提供商分布和置信度分布
主要函数
brute_force_subdomains() - 便捷的暴破函数
pub async
export_subdomain_results_with_options() - 使用自定义 CDN 聚合选项导出结果
run_speed_test() - 网速测试函数
pub async
export_results() - 结果导出函数
export_subdomain_results() - 直接导出扫描结果
JSON 导出会额外包含:
raw_results:每条原始扫描记录,包含query_typeaggregated_domains:按域名聚合后的展示视图verified/dns_records:在启用对应功能后保留详细结果
完整示例
查看 examples/ 目录中的完整示例:
examples/quick_start.rs- 快速入门示例examples/library_usage.rs- 完整功能示例
运行示例:
# 运行快速入门示例
# 运行完整示例
注意事项
- 权限要求: 库的高性能路径会直接访问链路层接口。Linux 通常需要管理员权限或等效能力;macOS 在未配置 BPF 设备权限时通常需要
sudo,安装 Wireshark 的ChmodBPF/chmodbpf并赋予当前用户访问权限后可直接以普通用户运行 - 异步运行时: 必须在tokio运行时中使用
- 网络依赖: 需要稳定的网络连接
- 系统依赖: Windows 需要 Npcap/WinPcap 兼容环境;Linux/macOS 主要依赖系统原生网络接口权限配置
- 错误处理: 建议使用
?操作符或match进行错误处理
集成建议
- 在Web应用中,建议将暴破任务放在后台队列中执行
- 在桌面应用中,建议使用进度回调显示扫描进度
- 在服务中,建议添加速率限制和超时控制
- 建议缓存DNS解析结果以提高性能
许可证
MIT License
贡献
欢迎提交Issue和Pull Request!
免责声明
本工具仅用于授权的安全测试和学习研究。使用者需遵守相关法律法规,作者不承担任何滥用责任。