| Crates.io | rsubdomain |
| lib.rs | rsubdomain |
| version | 1.2.6 |
| created_at | 2025-07-30 07:39:20.005569+00 |
| updated_at | 2025-08-14 01:08:47.980908+00 |
| description | A high-performance subdomain brute-force tool written in Rust |
| homepage | https://github.com/o0x1024/rsubdomain |
| repository | https://github.com/o0x1024/rsubdomain |
| max_upload_size | |
| id | 1773216 |
| size | 280,513 |
基于Rust实现的高性能子域名暴破工具,实现原理参考 ksubdomain
使用前需要安装libpcap或npcap:
# Ubuntu/Debian
sudo apt-get install libpcap-dev
# CentOS/RHEL
sudo yum install libpcap-devel
# macOS
brew install libpcap
需要安装以下组件:
Packet.lib并放置在项目根目录的lib文件夹中git clone https://github.com/o0x1024/rsubdomain
cd rsubdomain
cargo build --release
# 基本子域名扫描
./rsubdomain -d example.com
# 使用自定义字典文件
./rsubdomain -d example.com -f wordlist.txt
# 静默模式(只输出发现的域名)
./rsubdomain -d example.com --slient
# 扫描多个域名
./rsubdomain -d example.com -d test.com
# 列出所有网络接口
./rsubdomain -l
# 网速测试(默认目标8.8.8.8)
./rsubdomain -n
# 指定目标IP进行网速测试
./rsubdomain -n --target-ip 1.1.1.1
# 手动指定网络设备
./rsubdomain -d example.com -e eth0
# 带宽限制
./rsubdomain -d example.com -b 5M
# HTTP/HTTPS验证模式
./rsubdomain -d example.com -v
# DNS记录解析
./rsubdomain -d example.com --resolve-records
# 同时启用验证和解析
./rsubdomain -d example.com -v --resolve-records
# 显示汇总统计
./rsubdomain -d example.com --summary
# 导出为JSON格式
./rsubdomain -d example.com -o results.json --format json
# 导出为CSV格式
./rsubdomain -d example.com -o results.csv --format csv
# 导出为XML格式
./rsubdomain -d example.com -o results.xml --format xml
# 导出为TXT格式
./rsubdomain -d example.com -o results.txt --format txt
# 完整功能组合使用
./rsubdomain -d example.com -f wordlist.txt -v --resolve-records --summary -o results.json --format json -e eth0 -b 3M
| 参数 | 长参数 | 描述 | 默认值 |
|---|---|---|---|
-d |
--domain |
需要扫描的目标域名(可多个) | 必需 |
-l |
--list-network |
列出所有网络接口 | - |
-r |
--resolvers |
DNS解析器路径 | 系统默认DNS |
-s |
--slient |
静默模式,只输出域名 | false |
-f |
--file |
自定义字典文件路径 | 内置字典 |
-w |
--skip-wildcard |
跳过泛解析域名检测 | true |
-n |
--network-test |
执行网速测试 | - |
--target-ip |
网速测试目标IP | 8.8.8.8 | |
-b |
--bandwidth |
带宽限制 (K/M/G) | 3M |
-v |
--verify |
HTTP/HTTPS验证模式 | - |
--resolve-records |
解析DNS记录 | - | |
-e |
--device |
手动指定网络设备 | 自动检测 |
-o |
--output |
输出文件路径 | - |
--format |
输出格式 (json/xml/csv/txt) | json | |
--summary |
显示汇总统计 | - |
域名 IP地址 记录类型 时间戳
--------------------------------------------------------------------------------
www.example.com 93.184.216.34 A 14:23:45
mail.example.com 93.184.216.35 A 14:23:46
ftp.example.com ftp.example.org CNAME 14:23:47
域名 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
唯一IP数量: 23
已验证域名: 45
存活域名: 32
记录类型分布:
A: 134
CNAME: 18
MX: 4
IP段分布 (前10个):
93.184.216.0/24: 12 个IP
192.168.1.0/24: 8 个IP
10.0.0.0/24: 5 个IP
send_dns_queries方法参数不匹配问题🎉 初始版本发布
✨ 基本子域名暴破功能
✨ 自动网络设备检测
rsubdomain不仅可以作为命令行工具使用,还可以作为Rust库集成到你的项目中。
在你的Cargo.toml中添加依赖:
[dependencies]
# 从本地路径
rsubdomain = { path = "/path/to/rsubdomain" }
# 或从Git仓库
rsubdomain = { git = "https://github.com/o0x1024/rsubdomain" }
# 异步运行时(必需)
tokio = { version = "1.0", features = ["full"] }
use rsubdomain::{brute_force_subdomains, SubdomainBruteConfig, SubdomainBruteEngine};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
// 方法1: 使用便捷函数(最简单)
let domains = vec!["example.com".to_string()];
let results = brute_force_subdomains(domains, None).await?;
println!("发现 {} 个子域名", results.len());
for result in results.iter().take(5) {
println!(" {} -> {}", result.domain, result.ip);
}
Ok(())
}
use rsubdomain::{SubdomainBruteConfig, SubdomainBruteEngine, OutputFormat, export_results};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
// 创建配置
let config = SubdomainBruteConfig {
domains: vec!["example.com".to_string()],
resolvers: vec!["8.8.8.8".to_string(), "1.1.1.1".to_string()],
dictionary_file: Some("wordlist.txt".to_string()),
skip_wildcard: true,
bandwidth_limit: Some("5M".to_string()),
verify_mode: true, // 启用HTTP/HTTPS验证
resolve_records: true, // 启用DNS记录解析
silent: false,
device: None, // 自动检测网络设备
};
// 创建暴破引擎
let engine = SubdomainBruteEngine::new(config).await?;
// 执行暴破
let results = engine.run_brute_force().await?;
// 处理结果
for result in &results {
println!("域名: {}", result.domain);
println!(" IP: {}", result.ip);
println!(" 记录类型: {}", result.record_type);
// 验证结果
if let Some(ref verified) = result.verified {
println!(" HTTP状态: {:?}", verified.http_status);
println!(" HTTPS状态: {:?}", verified.https_status);
println!(" 标题: {:?}", verified.title);
}
// DNS记录
if let Some(ref dns_records) = result.dns_records {
println!(" DNS记录数: {}", dns_records.records.len());
}
println!();
}
Ok(())
}
SubdomainBruteConfig - 暴破配置
domains: Vec<String> - 目标域名列表resolvers: Vec<String> - DNS服务器列表dictionary_file: Option<String> - 字典文件路径skip_wildcard: bool - 是否跳过泛解析检测bandwidth_limit: Option<String> - 带宽限制verify_mode: bool - 是否启用HTTP/HTTPS验证resolve_records: bool - 是否解析DNS记录silent: bool - 静默模式device: Option<String> - 网络设备名称SubdomainResult - 暴破结果
domain: String - 发现的域名ip: String - 对应的IP地址record_type: String - DNS记录类型verified: Option<VerifyResult> - HTTP/HTTPS验证结果dns_records: Option<DnsResolveResult> - DNS记录解析结果brute_force_subdomains() - 便捷的暴破函数
pub async fn brute_force_subdomains(
domains: Vec<String>,
dictionary_file: Option<String>,
) -> Result<Vec<SubdomainResult>, Box<dyn std::error::Error>>
run_speed_test() - 网速测试函数
pub async fn run_speed_test(duration_secs: u64) -> Result<(), Box<dyn std::error::Error>>
export_results() - 结果导出函数
pub fn export_results(
discovered: Vec<DiscoveredDomain>,
verified: Vec<VerificationResult>,
summary: SummaryStats,
output_path: &str,
format: &OutputFormat,
) -> Result<(), Box<dyn std::error::Error>>
查看 examples/ 目录中的完整示例:
examples/quick_start.rs - 快速入门示例examples/library_usage.rs - 完整功能示例examples/Cargo.toml - 依赖配置示例运行示例:
# 进入示例目录
cd examples
# 运行快速入门示例
cargo run --bin quick_start
# 运行完整示例
cargo run --bin library_usage
?操作符或match进行错误处理MIT License
欢迎提交Issue和Pull Request!
本工具仅用于授权的安全测试和学习研究。使用者需遵守相关法律法规,作者不承担任何滥用责任。