Sambhav-2706/Subdomain-Enumeration-Tool
GitHub: Sambhav-2706/Subdomain-Enumeration-Tool
一款 Python 子域名枚举工具,整合多个被动数据源、字典暴力破解、DNS 解析与可选的 Web 探测,帮助安全测试人员快速发现和验证目标域的子域资产。
Stars: 0 | Forks: 0
# SubEnum
## 功能
- **被动发现** — 同时查询 5 个公共来源:
- crt.sh
- CertSpotter
- HackerTarget
- AlienVault (OTX)
- Anubis
- **智能暴力破解** — 内置包含 23 个常见子域名的字典(例如 `www`、`api`、`dev`、`admin`、`mail`、`vpn`、`staging`)
- **DNS 解析** — 具有可配置线程数的多线程 A 记录解析
- **Web 探测** *(可选)* — 检查 HTTP/HTTPS 的状态码和页面标题
- **丰富的 CLI 输出** — 通过 [Rich](https://github.com/Textualize/rich) 实现美观的表格、进度条和颜色标记的结果
- **JSON 导出** — 将结果保存为结构化的 JSON 文件
## 安装
### 前置条件
- Python 3.8+
- `pip`
### 依赖项
```
pip install requests dnspython pyfiglet rich
```
或者一次性安装所有依赖:
```
pip install -r requirements.txt
```
## 用法
### 基础扫描
```
python subenum.py -d example.com
```
### 包含 Web 探测的完整扫描
```
python subenum.py -d example.com --probe
```
### 将结果保存为 JSON
```
python subenum.py -d example.com --probe -o results.json
```
### 调整线程数
```
python subenum.py -d example.com -t 20
```
## 命令行选项
| 标志 | 描述 | 默认值 |
|------|-------------|---------|
| `-d`, `--domain` | 要枚举的目标域名 | *(必填)* |
| `-t`, `--threads` | 并发线程数 | `40` |
| `-o`, `--output` | 输出文件路径(JSON 格式) | `None` |
| `--probe` | 启用 HTTP/HTTPS 探测以获取状态码和标题 | `False` |
## 示例输出
```
____ __ ______
/ __ )____ / /___ ________/__ /_______ __
/ __ / __ \/ / __ \/ ___/ _ \/ / ___/ / / /
/ /_/ / /_/ / / /_/ / / / __/ / /__/ /_/ /
/_____/\____/_/\____/_/ \___/_/\___/\__, /
/____/
Subdomain Enumeration Tool | Target: example.com
✔ Found 15 subdomains from CrtSh
✔ Found 8 subdomains from CertSpotter
✘ HackerTarget (No Data/Timeout)
✔ Found 3 subdomains from AlienVault
✔ Found 22 subdomains from Anubis
[*] Resolving 42 discovered subdomains...
[*] Web Probing 18 live subdomains...
┌──────────────────────────┬─────────────────────┬──────┬────────────────────┐
│ SUBDOMAIN │ IP ADDRESS(ES) │ CODE │ PAGE TITLE │
├──────────────────────────┼─────────────────────┼──────┼────────────────────┤
│ api.example.com │ 93.184.216.34 │ 200 │ API Documentation │
│ blog.example.com │ 93.184.216.35 │ 200 │ Example Blog │
│ dev.example.com │ 93.184.216.36 │ 403 │ N/A │
│ mail.example.com │ 93.184.216.37 │ ??? │ N/A │
│ www.example.com │ 93.184.216.34 │ 200 │ Welcome to Example │
└──────────────────────────┴─────────────────────┴──────┴────────────────────┘
COMPLETED! Found 18 live subdomains.
INFO: Results saved to results.json
```
## 架构
```
Scanner (Manager)
│
├── auto_brute_force() → Smart wordlist scan + DNS resolution
├── Passive Sources → CrtSh, CertSpotter, HackerTarget, AlienVault, Anubis
├── DNS Resolution → Multi-threaded A-record lookup
└── Web Probing (optional) → HTTP/HTTPS status + title extraction
```
### 类层次结构
| 类 | 角色 |
|-------|------|
| `Source` (ABC) | 所有被动数据源的抽象基类 |
| `CrtSh` | 查询证书透明度日志 |
| `CertSpotter` | 查询 CertSpotter API 获取 DNS 名称 |
| `HackerTarget` | 查询 HackerTarget 主机搜索 API |
| `AlienVault` | 查询 AlienVault OTX 被动 DNS |
| `Anubis` | 查询 JLDC Anubis 子域名数据库 |
| `Scanner` | 协调枚举、解析和探测 |
## 默认字典
内置的“智能扫描”字典包含:
```
www, mail, gmail, classroom, drive, docs, api, dev,
test, stage, staging, blog, shop, admin, vpn, m,
remote, server, support, cloud, app, secure, beta
```
## 输出格式 (JSON)
使用 `-o` 时,结果保存为:
```
{
"api.example.com": {
"ips": ["93.184.216.34"],
"status": 200,
"title": "API Documentation"
},
"dev.example.com": {
"ips": ["93.184.216.36"],
"status": 403,
"title": "N/A"
}
}
```
## 注意事项
- **SSL 警告:** 在对使用未验证证书的 HTTPS 进行探测时,会抑制 `urllib3` 警告。
- **速率限制:** Web 探测使用配置线程数的一半,以避免触发 WAF。
- **超时:** DNS 解析使用 1 秒超时;HTTP(S) 探测使用 3 秒超时。
- **错误处理:** 所有网络请求都包装在 try/except 块中,以确保即使某个源失败,扫描也能继续。
## 许可证
MIT 许可证 — 可自由使用、修改和分发。
## 免责声明
本工具仅供**授权的安全测试和研究使用**。在扫描您不拥有的任何域名之前,请务必确保已获得明确的许可。
标签:DNS解析, GitHub, Python, 子域名枚举, 实时处理, 开源项目, 无后门, 系统安全, 逆向工具