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 ``` ![Python](https://img.shields.io/badge/python-3.8+-00ff99) ![License](https://img.shields.io/badge/license-MIT-4d9fff) ![Status](https://img.shields.io/badge/recon-passive-00ff99) ## 我为什么开发这个工具 当你刚接触安全领域时,侦察感觉就像是被无数工具折磨至死。你需要运行一个工具查 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, 主机安全, 动态插桩, 安全工具库, 实时处理, 无后门, 被动侦察, 逆向工具