VikashChoudhary-04/subhunt
GitHub: VikashChoudhary-04/subhunt
基于 DNS over HTTPS 的轻量级主动子域名暴力破解枚举工具,专注于在受限网络环境下提供准确、可验证的侦察结果。
Stars: 1 | Forks: 0
# Subhunt





**Subhunt** 是一款快速、轻量且可靠的**主动子域名枚举工具**,基于 **DNS over HTTPS (DoH)** 构建。
它专为**实战侦察**而设计,适用于传统 DNS (UDP/53)、被动数据源或大型侦察框架不可靠、被封锁或过于显眼的场景。
Subhunt 专注于**准确性、清晰度以及规范的 CLI 行为**。
## ✨ 功能
- 🚀 主动子域名暴力破解枚举
- 🌐 DNS over HTTPS (DoH) 支持多解析器故障转移
- Cloudflare
- Google
- Quad9
- ⚡ 支持配置线程的并发扫描
- 📊 单行实时状态显示(无刷屏,无闪烁)
- 🔎 发现结果即时输出
- 🧩 字典无关性(支持 SecLists, Assetnote 及自定义字典)
- 🧼 零误报(实时 DNS 验证)
- 🤫 提供 `--quiet` 模式,适用于自动化和 pipeline
- 🧪 提供有意义的 exit code,便于编写脚本
- 🧠 DNS 结果缓存(加快扫描速度,减少网络请求)
- 🎯 通配符 DNS 检测并明确警告
- 📄 提供 `--json` 模式以输出机器可读格式
- 📊 平滑速率计算(滑动窗口)
## 🧠 设计理念
Subhunt 刻意保持**简单且坚定**。
- **仅限主动枚举**
- **无被动数据源**(不使用 crt.sh、API 或第三方数据集)
- **字典为外部数据**,不作为工具的一部分
- **准确优于干扰**
- **验证优先**:每个结果在扫描时均经过 DNS 确认
Subhunt 倾向于提供确定性、可验证的结果,而非单纯追求最大覆盖率。
如果输出了某个子域名,说明它在扫描期间是可解析的。
## 📦 安装
### 环境要求
- Go **1.20+**
- 网络访问(DNS over HTTPS 需要 HTTPS 连接)
### 克隆仓库
```
git clone https://github.com/VikashChoudhary-04/subhunt.git
cd subhunt
```
## 🚀 用法
### 基本用法
```
go run ./cmd/subhunt \
-d example.com \
--bruteforce /path/to/wordlist.txt
```
### 提高并发
```
go run ./cmd/subhunt \
-d example.com \
--bruteforce /path/to/wordlist.txt \
--threads 100
```
### 安静模式(仅输出结果)
```
go run ./cmd/subhunt \
-d example.com \
--bruteforce /path/to/wordlist.txt \
--quiet
```
### 将结果保存到文件
```
go run ./cmd/subhunt \
-d example.com \
--bruteforce wordlist.txt \
--quiet \
> results.txt
```
### JSON 输出模式(自动化)
```
go run ./cmd/subhunt \
-d example.com \
--bruteforce /path/to/wordlist.txt \
--json
```
JSON 输出示例:
{
"domain": "example.com",
"found": ["www.example.com", "api.example.com"],
"tested": 5000,
"found_count": 2,
"duration": "2.3s"
}
## 📊 输出行为
### 实时状态行 (stderr)
```
[RUNNING] Tested: 4214 | Found: 19 | Rate: 247/s
```
- 单行显示
- 原地更新
- 绝不重复
- 绝不与结果混淆
- 平滑速率(滑动窗口,非总体平均值)
### 结果 (stdout)
```
[+] www.example.com
[+] api.example.com
```
- 发现时立即输出
- 始终另起一行
- 可安全通过管道传递给其他工具
## 🔄 Exit Code
Subhunt 使用**对自动化友好的 exit code**:
| 条件 | Exit Code |
|--------|-----------|
| 至少发现一个子域名 | `0` |
| 未发现子域名 | `1` |
| 无效用法 | `1` |
### 示例
```
subhunt ... && echo "Subdomains found"
```
## 📁 项目结构
```
cmd/
└── subhunt/
└── main.go # CLI entry point
internal/
├── bruteforce/
│ └── dns.go # Concurrent bruteforce engine
├── dnsresolver/
│ └── doh.go # DNS over HTTPS resolver
└── ui/
└── ui.go # CLI UI helpers
wordlists/
└── README.md # Wordlist guidance (no lists bundled)
.gitignore
README.md
go.mod
```
## 📁 字典
Subhunt **不内置字典**。
建议您使用**社区维护的字典**,例如:
- SecLists
- Assetnote
- ProjectDiscovery
- OWASP Amass
- 漏洞赏金精选列表
请参阅 [README](wordlists/README.md) 了解:
- 推荐字典(截至 2026 年)
- 用法指南
- 关于纯数字字典的警告
### 示例 (SecLists)
```
go run ./cmd/subhunt \
-d example.com \
--bruteforce /usr/share/wordlists/seclists/Discovery/DNS/subdomains-top1million-5000.txt
```
## 关于准确性的说明
- 检测到通配符 DNS 会明确报告
- 不抑制结果,以避免漏报
- 安全处理大型字典(已调整 scanner 缓冲区)
- 将 DNS 结果缓存在内存中以提高性能
## ⚠️ 常见错误
- ❌ 期望每个域名都能暴露大量子域名
- ❌ 直接使用纯数字字典
- ❌ 认为“无输出”意味着工具运行失败
## 🧪 快速完整性测试
```
echo www > test.txt
go run ./cmd/subhunt -d yahoo.com --bruteforce test.txt
```
预期输出:
```
[+] www.yahoo.com
```
检查 exit code:
```
echo $?
# 0
```
## 👨💻 作者
**Vikash Choudhary**
以**专业的攻防安全思维**构建,专注于准确性、整洁的用户体验和实际环境的限制。
## 📜 免责声明
本工具仅供**教育目的和授权的安全测试使用**。
您需自行负责遵守所有适用法律和项目规则。
## ⭐ 结语
Subhunt 刻意保持**轻量、诚实且可预测**。
它并不试图取代大型侦察框架。
它提供的是您可以信赖并据此构建的**干净、可验证的结果**。
标签:DoH, EVTX分析, GitHub, Python, 动态分析, 子域名枚举, 实时处理, 文档结构分析, 无后门, 日志审计, 特征匹配, 系统安全