VikashChoudhary-04/subhunt

GitHub: VikashChoudhary-04/subhunt

基于 DNS over HTTPS 的轻量级主动子域名暴力破解枚举工具,专注于在受限网络环境下提供准确、可验证的侦察结果。

Stars: 1 | Forks: 0

# Subhunt ![License](https://img.shields.io/badge/License-MIT-blue?style=flat-square) ![Python](https://img.shields.io/badge/Python-3.x-yellow?style=flat-square) ![Hands-on](https://img.shields.io/badge/Hands--on-Yes-success?style=flat-square) ![Cybersecurity](https://img.shields.io/badge/Cybersecurity-Offensive-red?style=flat-square) ![Pentesting](https://img.shields.io/badge/Pentesting-Web_App-important?style=flat-square) **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, 动态分析, 子域名枚举, 实时处理, 文档结构分析, 无后门, 日志审计, 特征匹配, 系统安全