mehulgupta1/subhound
GitHub: mehulgupta1/subhound
一个用 Go 编写的高级子域名枚举编排工具,将多个开源侦察工具整合为单一二进制的自动化流水线。
Stars: 0 | Forks: 0
# SubHound 🐾
**适用于 Linux 和 macOS 的高级子域名枚举工具。**
SubHound 是一个单一的 Go 二进制文件,它将最佳的开源侦察工具编排
为一个快速的 pipeline:
```
discover → resolve → probe → save
(passive/brute/perm/asn) (dnsx) (httpx) (local files)
```
它从多个来源发现子域名,对其进行解析(剔除 DNS 泛解析),
检查哪些在 HTTP(S) 上是存活的,并写入干净的结果文件 —— 具有
**按来源划分的错误报告**功能,因此静默失败永远不会显示为“找到 0 个”。
## 环境要求
- **Linux 或 macOS**(不支持 Windows —— 因为这些侦察工具仅限 *nix 平台)
- **Go** —— 如果你没有安装,可以通过 `-setup` 自动安装
## 安装说明
```
# 1. 获取代码
git clone https://github.com/mehulgupta1/subhound.git
cd subhound
# 2. 构建 binary(需要 Go)
go build -o subhound .
# 3. 安装其调用的 recon 工具(subfinder、dnsx、httpx、……)
./subhound -setup
```
`-setup` 是**幂等的**(只安装缺失的内容)并且是**故障软化**的
(某个可选工具失败永远不会中止其余的安装)。 完成后,如果 Go 的 bin 目录
还不在你的 PATH 中,请将其添加到 PATH:
```
export PATH="$PATH:$(go env GOPATH)/bin"
```
### 它安装的工具
| 必需(pipeline 需要这些) | 可选(提供额外功能) |
|---|---|
| `subfinder` — 被动来源 | `assetfinder` — 更多被动来源 |
| `dnsx` — DNS 解析 | `alterx` — 排列引擎 (`-perm`) |
| `httpx` — HTTP 探测 | `github-subdomains` — GitHub 来源 |
| `anew` — 去重合并 | `tlsx` — 证书抓取 (`-tls`) |
| `asnmap` — ASN 查询 (`-asn`) | `ffuf` — vhost 暴力破解 (`-vhost`) |
| `mapcidr` — CIDR 扩展 | `findomain` — 额外被动来源 |
## API 密钥(可选,但推荐)
一些被动来源在使用免费 API 密钥时会返回**多得多**的结果。 一次性
存储它们:
```
./subhound -config
```
它会提示输入(留空则跳过):**Chaos/PDCP**、**GitHub token**、
**SecurityTrails**、**VirusTotal** —— 并将它们写入工具读取它们
的位置(subfinder 的 `provider-config.yaml`)。 **Chaos/PDCP** 密钥
还可以启用 ASN 扫描(`asnmap`),因此如果你想使用 `-asn`,请添加它。
## 快速开始
```
# 最简单 — passive discovery + resolve + probe
./subhound -d target.com
# 全开(彻底):所有 passive sources + brute + perm + asn
./subhound -d target.com -all -brute -perm -asn
# 从文件获取多个目标
./subhound -l domains.txt
# 兼容 pipe:仅输出 live subdomains,无 banner/logs
cat domains.txt | ./subhound -silent
```
默认情况下,SubHound 运行**被动发现 + 解析 + HTTP 探测**。
更繁重的阶段(`-brute`、`-perm`、`-asn`、`-tls`、`-vhost`)是可选的。
## 功能 —— 每个标志的作用
### 输入
| 标志 | 作用 |
|---|---|
| `-d`, `-domain` | 单个目标 domain |
| `-l`, `-list` | domain 文件,每行一个(也支持 stdin) |
| `-exclude` | 从结果中**剔除**的超出范围的列表/正则表达式 |
### 发现(查找子域名)
| 标志 | 作用 |
|---|---|
| *(默认)* | **被动**来源 (subfinder, findomain, assetfinder, …) |
| `-all` | 启用**所有**被动来源(较慢,更彻底) |
| `-brute` | 使用 wordlist 进行 DNS **暴力破解**(内置,或使用 `-w`) |
| `-perm` | **排列**/变异 —— 篡改已知名称以查找同级域名 |
| `-asn` | 对目标拥有的 IP 空间进行 **ASN + 反向 DNS** 扫描 |
| `-recursive` | 对**新发现的**子域名进行额外的暴力破解/排列传递 |
### 探测与附加功能
| 标志 | 作用 |
|---|---|
| *(默认)* | 使用 httpx 进行 **HTTP 探测** —— 哪些主机实际存活 |
| `-tls` | 从存活主机的 **TLS 证书** (SAN/CN) 中抓取名称 |
| `-vhost` | 针对共享 IP 进行**虚拟主机**暴力破解 |
### 切换(关闭默认项)
| 标志 | 作用 |
|---|---|
| `-no-passive` | 跳过被动来源(例如仅暴力破解模式) |
| `-np`, `-no-probe` | 跳过 HTTP 探测(仅发现 + 解析) |
### 选项
| 标志 | 作用 |
|---|---|
| `-w`, `-wordlist` | 用于 `-brute` 的 wordlist(默认:内置) |
| `-pw`, `-perm-words` | 用于 `-perm` 的 token 列表(默认:内置) |
| `-r`, `-resolvers` | 自定义 DNS 解析器文件 |
| `-t`, `-threads` | 并发数(默认 100) |
| `-o`, `-output` | 输出目录 |
| `-json` | 同时输出 JSON |
| `-silent` | 仅打印子域名 —— 无 banner/日志(适合管道传输) |
| `-setup` | 安装/验证工具,然后退出 |
| `-config` | 将 API 密钥保存到 subfinder 配置中 |
| `-version` | 打印版本 |
| `-h`, `-help` | 显示帮助 |
## 输出
每次运行都会写入一个文件夹 `subhound--/`,其中包含:
| 文件 | 内容 |
|---|---|
| `all-subdomains.txt` | 发现的每个唯一的子域名 |
| `resolved.txt` | 解析的主机及其 IP (`host ip1,ip2`) |
| `alive.txt` | 存活的 HTTP(S) 主机,人类可读 |
| `alive.json` | 作为原始 httpx JSON 的存活主机(用于管道传输/解析) |
| `vhosts.json` | 虚拟主机发现(仅在使用 `-vhost` 时) |
结果会在**每个阶段之后增量保存**,因此如果你按下 `Ctrl-C`
(或发生崩溃),到目前为止已完成的所有内容都已经保存在磁盘上了。
## 示例
```
# 快速 recon,无 probe(仅 name list)
./subhound -d target.com -np
# 仅 brute-force(跳过 passive),无 probe
./subhound -d target.com -brute -no-passive -np
# 彻底 + cert harvesting + 自定义 wordlist
./subhound -d target.com -all -brute -perm -tls -w big-wordlist.txt
# scope 感知:丢弃 out-of-scope hosts
./subhound -d target.com -all -exclude out-of-scope.txt
```
## License
个人侦察工具 —— 请负责任地使用,且仅针对你获得授权
测试的目标。
标签:EVTX分析, GitHub, Go, Ruby工具, 子域名枚举, 安全侦察, 实时处理, 日志审计, 系统安全, 运行时操纵