1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
//! # rsubdomain
//!
//! 一个基于Rust实现的高性能子域名暴破工具库。
//!
//! ## 特性
//!
//! - 🚀 **高性能**: 基于原始套接字的异步DNS查询,支持高并发
//! - 🔍 **功能丰富**: 支持子域名发现、HTTP/HTTPS验证、DNS记录解析
//! - 📊 **多格式输出**: 支持JSON、XML、CSV、TXT四种输出格式
//! - 🌐 **智能网络**: 自动检测网络设备,支持手动指定网络接口
//! - 📈 **网速测试**: 内置DNS包发送速度测试功能
//! - 🎯 **泛解析检测**: 智能识别并处理泛解析域名
//! - ⚡ **带宽控制**: 支持带宽限制,避免网络拥塞
//! - 🔄 **智能重试**: 自动处理超时和失败的DNS查询
//!
//! ## 快速开始
//!
//! ### 方法1: 使用便捷函数
//!
//! ```rust,no_run
//! use rsubdomain::brute_force_subdomains;
//!
//! #[tokio::main]
//! async fn main() -> Result<(), Box<dyn std::error::Error>> {
//! let domains = vec!["example.com".to_string()];
//! let results = brute_force_subdomains(
//! domains,
//! None, // dictionary_file
//! None, // resolvers
//! true, // skip_wildcard
//! None, // bandwidth_limit
//! false, // verify_mode
//! false, // resolve_records
//! false, // silent
//! None, // device
//! ).await?;
//!
//! println!("发现 {} 个子域名", results.len());
//! for result in results.iter().take(3) {
//! println!(" {} -> {} ({})", result.domain, result.ip, result.record_type);
//! }
//!
//! Ok(())
//! }
//! ```
//!
//! ### 方法2: 使用配置引擎
//!
//! ```rust,no_run
//! use rsubdomain::{SubdomainBruteConfig, SubdomainBruteEngine};
//!
//! #[tokio::main]
//! async fn main() -> Result<(), Box<dyn std::error::Error>> {
//! let config = SubdomainBruteConfig {
//! domains: vec!["example.com".to_string()],
//! verify_mode: true, // 启用HTTP/HTTPS验证
//! resolve_records: true, // 启用DNS记录解析
//! bandwidth_limit: Some("5M".to_string()), // 带宽限制
//! silent: false,
//! ..Default::default()
//! };
//!
//! let engine = SubdomainBruteEngine::new(config).await?;
//! let results = engine.run_brute_force().await?;
//!
//! println!("发现 {} 个子域名", results.len());
//! for result in results.iter().take(3) {
//! println!(" {} -> {} ({})", result.domain, result.ip, result.record_type);
//! if let Some(verified) = &result.verified {
//! println!(" HTTP: {}, HTTPS: {}, HTTP存活: {}, HTTPS存活: {}",
//! verified.http_status.unwrap_or(0),
//! verified.https_status.unwrap_or(0),
//! verified.http_alive,
//! verified.https_alive
//! );
//! }
//! }
//!
//! Ok(())
//! }
//! ```
//!
//! ## 高级功能
//!
//! ### 带宽控制和网速测试
//!
//! ```rust,no_run
//! use rsubdomain::{run_speed_test, brute_force_subdomains};
//!
//! #[tokio::main]
//! async fn main() -> Result<(), Box<dyn std::error::Error>> {
//! // 网速测试(5秒)
//! run_speed_test(5).await?;
//!
//! // 使用带宽限制进行子域名扫描
//! let domains = vec!["example.com".to_string()];
//! let results = brute_force_subdomains(
//! domains,
//! None,
//! None,
//! true,
//! Some("3M".to_string()), // 限制带宽为3M
//! false,
//! false,
//! false,
//! None,
//! ).await?;
//!
//! println!("发现 {} 个子域名", results.len());
//!
//! Ok(())
//! }
//! ```
//!
//! ### 使用自定义字典
//!
//! ```rust,no_run
//! use rsubdomain::brute_force_subdomains_with_dict;
//!
//! #[tokio::main]
//! async fn main() -> Result<(), Box<dyn std::error::Error>> {
//! let domains = vec!["example.com".to_string()];
//! let dictionary = vec![
//! "www".to_string(),
//! "mail".to_string(),
//! "ftp".to_string(),
//! "api".to_string(),
//! ];
//!
//! let results = brute_force_subdomains_with_dict(
//! domains,
//! dictionary,
//! None, // resolvers
//! true, // skip_wildcard
//! None, // bandwidth_limit
//! false, // verify_mode
//! false, // resolve_records
//! false, // silent
//! None, // device
//! ).await?;
//!
//! println!("使用自定义字典发现 {} 个子域名", results.len());
//!
//! Ok(())
//! }
//! ```
// 内部模块
// 重新导出主要的公共API
pub use ;
// 导出其他有用的类型
pub use ;
pub use ;
pub use ;
pub use export_results;
pub use ;
pub use ;
pub use WildcardDetector;
// 设备相关
pub use ;
// 状态管理
pub use BruteForceState;