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, 子域名枚举, 实时处理, 攻击面映射, 无后门, 系统安全, 逆向工具