yahyaibr/subdomain-enumeration
GitHub: yahyaibr/subdomain-enumeration
一款 Python 命令行子域名枚举工具,通过并行查询多个公开 OSINT 和被动 DNS 数据源来收集、去重并输出目标域名的子域名列表。
Stars: 1 | Forks: 0
# 子域名工具
一款命令行 OSINT 实用程序,通过并行查询多个公开的 passive-DNS 和 certificate-transparency 来源来发现给定域名的子域名,然后将结果合并并去重。
## 使用的来源
| 来源 | 是否需要 API key? |
|---|---|
| [crt.sh](https://crt.sh)(certificate transparency 日志) | 否 |
| [AlienVault OTX](https://otx.alienvault.com)(passive DNS) | 是 — `OTX_API_KEY` |
| [VirusTotal](https://www.virustotal.com)(子域名) | 是 — `VT_API_KEY` |
| [SecurityTrails](https://securitytrails.com)(子域名) | 是 — `SECURITYTRAILS_API_KEY` |
| [ThreatCrowd](https://threatcrowd.org) | 否 |
| [BufferOver](https://tls.bufferover.run)(TLS/DNS) | 否 |
需要 key 的来源在未设置该 key 时会自动跳过 —— 仅使用 crt.sh、ThreatCrowd 和 BufferOver 该工具也能正常运行。
## 环境要求
- Python 3.9+
- `requests`
安装依赖:
```
pip install requests
```
## 设置
从您想使用的付费来源获取免费的 API key,然后将它们导出为环境变量:
```
export OTX_API_KEY="your_otx_key"
export VT_API_KEY="your_virustotal_key"
export SECURITYTRAILS_API_KEY="your_securitytrails_key"
```
## 用法
交互模式(提示输入域名):
```
python subdomain_tool.py
```
直接模式:
```
python subdomain_tool.py example.com
```
将结果保存到文件:
```
python subdomain_tool.py example.com -o results.txt
```
调整请求超时和并发数:
```
python subdomain_tool.py example.com --timeout 15 --workers 6
```
### CLI 选项
| 标志 | 描述 | 默认值 |
|---|---|---|
| `domain` | 目标域名(位置参数,可选 —— 若省略则提示输入) | — |
| `-o`, `--output` | 用于写入排序后子域名列表的文件 | 无(仅打印) |
| `--timeout` | 单个请求的超时时间(秒) | `10` |
| `--workers` | 并发查询的来源数量 | `6` |
## 工作原理
1. 每个来源模块(`source_crtsh`、`source_otx` 等)发送一个 HTTP 请求,并将其响应规范化为一组小写的主机名。
2. 所有六个来源都通过 `ThreadPoolExecutor` 并发调度,因此缓慢或无响应的 API 不会阻塞其他来源。
3. 每个来源都封装在各自独立的错误处理中 —— 来自某个来源的失败请求、超时、缺少 key 或格式错误的 JSON 响应都会记录到 stderr 中并被直接排除,而不会导致程序运行崩溃。
4. 来自所有来源的结果会被合并为一个去重后的集合,并排序打印,还可以选择将其写入文件。
## 注意事项
- 此工具仅查询第三方公开数据源 —— 它不会扫描目标域名或向其发送流量。
- VirusTotal、SecurityTrails 和 OTX 的免费层级有速率限制;频繁使用可能会返回错误,工具会报告这些错误但不会导致崩溃。
- 请负责任地使用,并且仅针对您已获得授权评估的域名使用。
标签:ESC4, GitHub, OSINT, Python, TShark, 子域名枚举, 实时处理, 攻击面映射, 无后门, 系统安全, 逆向工具