AlexPGAO/reconhound
GitHub: AlexPGAO/reconhound
一款面向新手的被动域名侦察工具,一条命令即可汇总 WHOIS、DNS、HTTP 指纹、安全头评级和子域名信息并生成清晰报告。
Stars: 0 | Forks: 0
# 🐾 ReconHound
**针对单个域名的被动侦察 —— 一条命令,一份清晰的报告。**
将 ReconHound 指向一个你有权测试的域名,它就能嗅探出关于该域名的一切公开信息:谁拥有它、它发布了哪些 DNS 记录、它的 web server 泄露了什么、它如何通过 security headers 进行自我防护,以及哪些子域名隐藏在 certificate transparency 日志中。
它的设计初衷是*对新手友好*。不需要带有 40 个 flag 的命令行,也没有晦涩难懂的输出。只需运行它并阅读报告即可。
```
$ reconhound example.com
```



## 我为什么开发这个工具
当你刚接触安全领域时,侦察感觉就像是被无数工具折磨至死。你需要运行一个工具查 WHOIS,用另一个查 DNS,再复制粘贴到第三个工具里查子域名,还要眯着眼睛手动检查 HTTP headers。ReconHound 将这*第一轮筛查*打包成了一条命令,这样你就能快速看清目标的大致轮廓 —— 然后在知道该深入哪里之后,再使用更重量级的工具进行细致排查。
它叫 ReconHound,因为一个好的侦察工具就像一只嗅觉灵敏的猎犬:你为它指出一条线索,它就会顺着公开的蛛丝马迹追查下去。(另外,我也养了一只比格犬。🐶)
## 它的功能
| 模块 | 发现的内容 | 来源 |
|---|---|---|
| **WHOIS** | 注册商、创建/过期日期、name servers、国家 | WHOIS records |
| **DNS** | A、AAAA、MX、NS、TXT、CNAME、SOA records | Public DNS |
| **HTTP fingerprint** | 状态码、重定向、server 及 tech-stack headers、cookie flags | 站点本身 |
| **Security headers** | 针对站点防护 headers 的 A-F 评级,并说明缺失了什么及其原因 | 站点本身 |
| **Subdomains** | 在 certificate transparency 日志中出现的子域名 | crt.sh |
Security header 检查是我最引以为傲的部分 —— 它不仅仅是列出 headers,还会对站点进行**评级**,并解释*每个缺失的 header 能够防范什么*。这使得它在防御层面也很有用:在你自己的站点上运行它,并修复它标记出的任何问题。
## 安装
```
git clone https://github.com/AlexPGAO/reconhound.git
cd reconhound
pip install -r requirements.txt
```
或者将其安装为一个正式的命令,这样你就可以在任何地方运行 `reconhound`:
```
pip install .
```
需要 Python 3.8+。
## 用法
基本扫描:
```
reconhound example.com
```
你也可以直接输入完整的 URL —— 它会自动为你进行清理:
```
reconhound https://example.com/some/path?ref=whatever
```
**跳过子域名**(由于需要查询 crt.sh,这是最慢的步骤):
```
reconhound example.com --no-subs
```
**机器可读的 JSON**(非常适合通过管道传递给其他工具或保存结果):
```
reconhound example.com --json > example.recon.json
```
**显示更多子域名**(默认打印列表的上限为 100):
```
reconhound example.com --limit 500
```
不想安装,直接从源码运行?可以使用模块形式:
```
python -m reconhound example.com
```
### 所有选项
```
reconhound [--json] [--no-subs] [--limit N] [--version]
--json output raw JSON instead of the pretty report
--no-subs skip subdomain enumeration
--limit N max subdomains to display (default: 100)
--version print version and exit
```
## 示例输出
查看 [`examples/sample_output.txt`](examples/sample_output.txt) 获取完整的运行记录。
这里是 security-header 部分,也是其中最精彩的内容:
```
// SECURITY HEADERS
grade D (2/6 present)
+ Strict-Transport-Security
+ X-Content-Type-Options
- Content-Security-Policy -> limits where scripts/resources can load from
- X-Frame-Options -> stops clickjacking via framing
- Referrer-Policy -> controls how much referrer data leaks out
- Permissions-Policy -> restricts browser features (camera, mic, etc.)
```
## 这算“黑客行为”吗?(关于道德的说明)
**ReconHound 是被动的,仅使用公开信息。** 它查询的所有内容 —— WHOIS records、DNS、certificate transparency logs —— 都是已经发布的关于某个域名的数据。它唯一直接与目标进行通信的情况,是发送了一个普通的 HTTP GET 请求,就像你访问该网站时浏览器所做的那样。
它**不会**进行端口扫描、暴力破解、exploit 任何东西,也不会发送旨在探测漏洞的流量。它是你在进行*授权的*安全测试之前会做的侦察工作。
话虽如此:**请仅在你拥有或获得书面测试许可的域名上运行它。** 侦察是安全评估的第一阶段,即使是被动侦察也应有明确的范围。不要乱来。
## 工作原理(写给好奇的人)
- **WHOIS** 使用了 [`python-whois`](https://pypi.org/project/python-whois/) 库。
- **DNS** 使用 [`dnspython`](https://www.dnspython.org/) 来解析每种 record 类型。
- **HTTP fingerprint + security headers** 来源于单次 `requests` GET 请求,因此审计过程会复用我们已经获取到的 response,而不会去重复请求站点两次。
- **Subdomains** 提取自 [crt.sh](https://crt.sh),该网站索引了公开的 certificate transparency logs。一个站点颁发的每一张 HTTPS 证书都会被记录在那里,从而悄无声息地暴露了其子域名 —— 完全不需要暴力破解。
代码被拆分成了位于 `reconhound/modules/` 下的多个小模块,每个模块都暴露了一个 `gather()`(执行实际工作)和一个 `display()`(负责打印结果)。如果你想添加一个模块,请遵循这个模式。
## 路线图
我可能会添加的一些想法(欢迎提交 PR):
- [ ] `--output` flag,用于将报告保存到文件中
- [ ] Reverse-IP 查询(查找同一 host 上的其他站点)
- [ ] 针对已解析地址的简单 GeoIP
- [ ] 发现 `robots.txt` / `sitemap.xml`
- [ ] 针对扫描多个目标的 rate-limit 友好性处理
## License
MIT —— 详见 [LICENSE](LICENSE)。随意使用它、fork 它、从中学习。
由 [Alex](https://github.com/AlexPGAO) 开发 · 更多适合新手的安全文章请访问
[**OvernightHacker.com**](https://overnighthacker.com)
标签:GitHub, Python, 主机安全, 动态插桩, 安全工具库, 实时处理, 无后门, 被动侦察, 逆向工具