Alwardani9090/SubdomainEnum
GitHub: Alwardani9090/SubdomainEnum
一款 Go 编写的快速子域名枚举工具,结合 25+ 被动数据源与主动 DNS 暴力破解,输出经过泛解析检测验证的存活子域名列表。
Stars: 0 | Forks: 0
# subdomainenum
一个使用 Go 编写的快速子域名枚举工具。它结合了**被动**来源(证书透明度、DNS 聚合器、搜索引擎、归档)和**主动**技术(DNS 暴力破解和智能排列),为目标构建一个经过验证的存活子域名列表。
```
_____ __ ____ _ ______
/ ___/__ __/ /_ / __ \____ ____ ___ ____ _(_)___ / ____/___ __ ______ ___
\__ \/ / / / __ \/ / / / __ \/ __ `__ \/ __ `/ / __ \ / __/ / __ \/ / / / __ `__ \
___/ / /_/ / /_/ / /_/ / /_/ / / / / / / /_/ / / / / // /___ / / / / /_/ / / / / / /
/____/\__,_/_.___/_____/\____/_/ /_/ /_/\__,_/_/_/ /_/ /_____//_/ /_/\__,_/_/ /_/ /_/
```
## 功能
- **被动枚举**:来自 25+ 个来源,针对每个目标并发运行。
- **主动枚举**(`-active`):使用内置字典进行 DNS 暴力破解,以及排列引擎(如果您的系统上安装了 [alterx](https://github.com/projectdiscovery/alterx),还可以选择与其集成)。
- **DNS 验证**:每个被发现的主机在报告前都会被解析,并带有自动的**泛解析 DNS 检测**,这样您就不会在泛解析严重的域名上被大量误报淹没。
- **多域名输入**:可以传入单个域名、逗号分隔的列表,或者一个每行一个域名的文件。
- **管道友好**:`-silent` 模式仅打印子域名,没有其他任何内容,因此可以直接接入您的其他侦察 pipeline。
## 安装
```
git clone https://github.com/Alwardani9090/SubdomainEnum.git
cd subdomainenum
go build -o subdomainenum ./cmd/subdomainenum
```
需要 Go 1.22+。在首次构建时,Go 会自动获取两个依赖项(`github.com/miekg/dns` 和 `gopkg.in/yaml.v3`)——只要您拥有正常的互联网访问,就无需手动操作。
## 用法
```
subdomainenum -d example.com
```
```
Usage of subdomainenum:
-active
Enable active enumeration (bruteforce + permutations)
-c int
Concurrency level for DNS probing (default 500)
-d string
Target domain(s) to enumerate subdomains for, comma-separated
-dns-timeout int
DNS timeout for validation queries (seconds) (default 3)
-http-timeout int
HTTP timeout for passive source requests (seconds) (default 20)
-i string
Input file: one domain per line
-no-color
Disable colored output
-o string
Output file for discovered subdomains
-silent
Silent mode: output only subdomains (for piping)
-skip-final-validation
Skip final DNS validation and defer resolution to a downstream dns stage
-v Verbose mode: show per-subdomain details and debug info
```
### 示例
```
# 仅 Passive,单个 domain
subdomainenum -d example.com
# Passive + active(bruteforce + permutations)
subdomainenum -d example.com -active
# 多个 domain
subdomainenum -d example.com,another.com
# 来自文件,保存输出,pipe-friendly
subdomainenum -i domains.txt -o results.txt -silent
# 直接输入 httpx 或其他工具
subdomainenum -d example.com -silent | httpx
```
## 配置 API 密钥(可选)
除非您进行了配置,否则需要 API 密钥的来源将被自动跳过。创建 `~/.config/subdomainenum/config.yaml`(工具在首次运行时会创建一个空文件)并添加您的密钥:
```
config:
shodan:
- "YOUR_SHODAN_KEY"
virustotal:
- "YOUR_VT_KEY"
securitytrails:
- "YOUR_ST_KEY"
censys:
- "YOUR_CENSYS_TOKEN"
```
每个来源都接受一个密钥**列表**——如果您提供了多个,工具会在它们之间轮换,以分散速率限制。
**此文件永远不会从仓库中读取,也永远不会被提交**——它存在于您的主目录中。`config.yaml` 也被列在 `.gitignore` 中,作为一道额外的安全网,以防有副本最终落入项目文件夹内。
### 被动来源(无需密钥)
crt.sh、CertSpotter、AlienVault OTX、Anubis、ThreatMiner、Google、HackerTarget、Wayback Machine、CommonCrawl、RapidDNS、DNS 记录(SPF/TXT 解析)
### 被动来源(需要 API 密钥)
Censys、WhoisXMLAPI、SecurityTrails、PassiveTotal、Chaos (ProjectDiscovery)、C99、Shodan、ZoomEye、FOFA、BinaryEdge、FullHunt、Netlas、URLScan、LeakIX、IntelX、DNSDB、VirusTotal、GitHub 代码搜索
## 工作原理
1. **被动阶段**——针对每个目标域名并发查询每个已启用的来源,并收集原始主机名。
2. **主动阶段** *(可选,`-active`)*——生成暴力破解字典和排列候选(基于已发现的内容生成常见前缀/模式),并解析每个候选项。
3. **验证阶段**——解析每个候选项,检测泛解析 DNS(这样 `*.example.com` 就不会淹没真实结果),并仅输出已确认的、非泛解析的主机。
## 法律 / 负责任的使用
此工具旨在用于授权的安全测试、漏洞赏金计划,以及对您拥有或获得明确测试许可的资产的研究。未经授权对域名进行主动枚举可能会违反服务条款或当地法律。请负责任地使用。
## 许可证
[MIT](LICENSE)
标签:DNS解析, EVTX分析, GitHub, Golang, 子域名枚举, 安全编程, 实时处理, 开源项目, 日志审计, 系统安全