inject3r/subdomain-finder
GitHub: inject3r/subdomain-finder
一款集成八种子域名发现技术的安全枚举工具,支持交互式控制和状态恢复,用于渗透测试中的目标资产收集。
Stars: 0 | Forks: 0
# 子域名查找器
专业的子域名枚举工具,具备 8 种强大的发现技术、实时进度跟踪、交互式暂停/恢复以及自动状态持久化。
## 功能
- **8 种发现技术**:
- HTML/响应抓取与链接提取
- DNS ANY 查询与区域传送尝试
- 证书透明度日志 (crt.sh)
- Wayback Machine 历史数据
- 公共 DNS 数据集 (BufferOver)
- 已发现子域名的智能排列组合
- 数字模式检测
- 使用自定义字典的字典爆破
- **交互式控制**:
- 使用 Ctrl+C 暂停/恢复
- 跳过当前操作
- 结束检测阶段
- 动态调整详细级别
- 保存状态并强制退出 (按 3 次 Ctrl+C)
- **专业功能**:
- 使用 atomhttp 的异步 HTTP 请求
- 随机 User-Agent 轮换
- 使用线程池进行 DNS 解析
- 速率限制和重试逻辑
- 用于恢复的完整状态持久化
- 带有文件组织的详细日志记录
- DNS 记录提取和记录
- 子域名验证和分类
## 安装说明
```
git clone https://github.com/inject3r/subdomain-finder.git
cd subdomain-finder
pip install -r requirements.txt
```
### 前置条件
- Python 3.8 或更高版本
- atomhttp 1.0.1 或更高版本
- beautifulsoup4 4.12.0 或更高版本
- dnspython 2.4.0 或更高版本
- colorama 0.4.6 或更高版本
- build 1.0.0 或更高版本
- twine 4.0.0 或更高版本
## 用法
### 基本用法
```
subdomain.py -d example.com
```
### 高级选项
```
subdomain.py -d example.com -t 100 --max-pages 100 --random-agent
```
### 恢复中断的扫描
```
subdomain.py -d example.com --resume
```
### 命令行参数
| 参数 | 描述 | 默认值 |
| -------------- | ------------------------------------ | -------- |
| -d, --domain | 目标域名(必填) | - |
| -t, --threads | 用于 DNS 解析的线程数 | 50 |
| -w, --wordlist | 自定义字典文件路径 | list.txt |
| --timeout | DNS 超时时间(秒) | 5 |
| --resume | 从之前的扫描状态恢复 | False |
| --max-pages | 最大抓取页数 | 50 |
| --random-agent | 为 HTTP 请求使用随机 User-Agent | False |
## 交互式控制
当使用 Ctrl+C 暂停工具时,将出现以下菜单:
| 命令 | 操作 |
| ----------- | ------------------------------------ |
| S / SKIP | 跳过当前操作并移至下一步 |
| E / END | 完全停止当前检测阶段 |
| N / NEXT | 跳至下一个技术 |
| C / CHANGE | 更改输出详细级别 |
| R / RESUME | 恢复当前操作 |
| Q / QUIT | 保存状态并退出 |
### 强制退出
在 5 秒内按三次 Ctrl+C 可保存状态并立即强制退出。
## 输出结构
所有结果均保存在 `logs/` 目录中:
```
logs/
└── example.com/
├── result.txt # Discovered subdomains with IPs
├── details.json # Complete JSON report
├── state.pkl # Serialized state for resume
├── raw_output.log # Raw log with timestamps
├── crawled_urls.txt # All crawled URLs
└── dns_records.txt # All DNS records found
```
### 结果格式
```
subdomain.example.com -> 192.168.1.1, 192.168.1.2 [technique]
mail.example.com -> 10.0.0.1 [crt.sh]
api.example.com -> 203.0.113.5 [bruteforce]
```
## 发现技术详解
### 1. HTML 爬虫
从 HTML 响应、JavaScript 代码、JSON 数据和链接属性中提取子域名。抓取至指定深度,并通过 DNS 查找验证发现的结果。
### 2. DNS ANY 查询
执行 ANY 记录查询以提取所有 DNS 记录,包括 A、AAAA、CNAME、MX、NS、TXT、SOA,并尝试从权威域名服务器进行区域传送。
### 3. 证书透明度
查询 crt.sh 证书日志,以查找已签发 SSL/TLS 证书的子域名。
### 4. Wayback Machine
从 Internet Archive 获取历史 URL,以发现旧的或已弃用的子域名。
### 5. 公共 DNS 数据集
查询如 BufferOver 等公共 DNS 数据集以获取历史 DNS 记录。
### 6. 智能排列组合
根据已发现的子域名生成智能排列组合(例如:dev-www、api-admin)。
### 7. 数字模式
测试常见的数字模式,如 ns1、ns2、server01、node02 等。
### 8. 字典爆破
使用字典文件中的子域名进行测试,支持可配置的线程池和速率限制。
## 字典
如果未提供字典,该工具会自动创建一个默认字典:
```
www, mail, ftp, admin, blog, dev, test, api, cdn, vpn,
ns1, ns2, smtp, pop3, imap, webmail, cpanel, whm, mysql,
database, backup, storage, cloud, app, apps, portal, dashboard,
status, stats, monitor, monitoring, logs, metrics, trace,
jenkins, gitlab, github, jira, confluence, wiki, docs,
support, help, forum, community, news, shop, store,
checkout, payment, gateway, billing
```
你可以使用 `-w` 参数提供自己的字典。
## 详细级别
| 级别 | 输出 |
| ---- | -------------------------------------- |
| 0 | 仅结果(静默模式) |
| 1 | 基本进度信息 |
| 2 | 带调试的详细输出(默认) |
在扫描期间使用 Ctrl+C 然后选择选项 C 来更改详细级别。
## 日志
所有操作均记录到 `logs//` 目录中:
- **result.txt**:包含 IP 地址的已发现子域名清晰列表
- **details.json**:包含时间戳和元数据的完整结构化数据
- **state.pkl**:用于恢复功能的序列化状态对象
- **raw_output.log**:带有时间戳的所有活动日志
- **crawled_urls.txt**:已抓取 URL 的完整列表
- **dns_records.txt**:在 ANY 查询期间发现的所有 DNS 记录
## 错误处理
该工具能够妥善处理各种错误情况:
- DNS 超时 - 自动重试最多 2 次
- 网络错误 - 记录日志并继续
- HTTP 错误 - 跳过有问题的 URL
- 键盘中断 - 保存状态并干净地退出
## 法律免责声明
本工具仅供教育和授权测试目的使用。未经事先双方同意而攻击目标是违法的。用户对任何滥用或损坏承担所有责任。在扫描您不拥有的任何域名之前,请务必获得适当的授权。
## 许可证
MIT License
## 贡献
欢迎各种贡献。请在 GitHub 上提交 pull request 或开启 issue。
标签:Python, 异步编程, 无后门, 网络安全, 进程管理, 逆向工具, 隐私保护