Jorgy762/osint-domain-recon
GitHub: Jorgy762/osint-domain-recon
一款自动化域名侦察 CLI 工具,通过整合 RDAP、DNS、邮件认证审计与 HTTP 探测,帮助用户在单次运行中完成全面的域名信息收集与安全配置检查。
Stars: 0 | Forks: 0
# OSINT 域名侦察工具
[](https://github.com/Jorgy762/osint-domain-recon/actions/workflows/test.yml)
一个基于 Python 的命令行工具,用于自动化域名侦察。给定目标域名后,它将通过 RDAP 获取注册数据,枚举 DNS 记录,对 SaaS 服务验证 token 进行分类,审计电子邮件身份验证(SPF、DMARC、DKIM、BIMI),并探测 HTTP/HTTPS 可用性。所有操作一次运行完成,并支持导出纯文本报告。
本项目作为学习项目开发,旨在将 IT/系统管理员知识与实用的网络安全工具衔接起来。
## 功能
- 通过 DNS 查询解析 IP 地址
- 通过 RDAP 获取注册数据(对于尚未运行 RDAP 服务器的 TLD,提供旧版 WHOIS 回退支持)
- DNS 记录枚举(A、AAAA、MX、NS、TXT、CNAME、SOA)
- 对 30 多种 SaaS 提供商(Microsoft 365、Google Workspace、Meta、Atlassian、Adobe、DocuSign、Stripe、AWS SES 等)进行服务验证 token 分类
- 电子邮件身份验证审计:
- SPF 解析,针对 RFC 7208 规定的 10 次 DNS 查询限制计算递归查询次数
- SPF 无效查询跟踪,针对 RFC 7208 规定的 2 次限制
- DMARC 标签解析,并标记策略执行情况
- 探测 29 个常见 selector 的 DKIM,并明确说明其局限性
- BIMI 查询
- HTTP/HTTPS 状态探测(状态码、server header、重定向跟踪)
- 域名输入验证(整洁地拒绝格式错误的输入)
- RDAP bootstrap 数据在磁盘上缓存 7 天,以避免重复请求 IANA
- 使用 `-o` 可选导出纯文本报告
## 环境要求
- Python 3.10 或更高版本
- 运行时依赖(通过 `pip install -e .` 自动安装):
- `whoisit` (RDAP)
- `python-whois` (旧版 WHOIS 回退)
- `dnspython` (DNS 解析)
- `requests` (HTTP 探测)
## 安装
克隆仓库并以可编辑模式安装:
```
git clone https://github.com/Jorgy762/osint-domain-recon.git
cd osint-domain-recon
python -m venv .venv
source .venv/Scripts/activate # Linux/macOS: source .venv/bin/activate
pip install -e .
```
`-e` 标志(可编辑安装)意味着对源文件的修改将立即生效,无需重新安装。安装完成后,在激活的 venv 中,您的 PATH 下即可使用 `osint-recon` 命令。
如需同时安装开发依赖(用于运行测试套件的 pytest):
```
pip install -e .[dev]
```
## 测试
测试套件涵盖了纯逻辑辅助工具:域名验证、SPF 解析、DMARC 解析、服务 token 分类、日期时间格式化和报告部分编写。测试不需要网络访问,可在不到一秒钟内完成。
要运行测试,请安装开发依赖并调用 pytest:
```
pip install -e .[dev]
pytest
```
预期输出:
```
============================== 67 passed in 0.17s ==============================
```
## 开发
本项目使用 [ruff](https://docs.astral.sh/ruff/) 进行代码检查和 import 排序。配置位于 `pyproject.toml` 中的 `[tool.ruff]` 下。
运行 linter:
```
ruff check .
```
在可能的情况下自动修复问题:
```
ruff check --fix .
```
GitHub Actions 会在每次推送到 `main` 分支以及每次 pull request 时,针对 Python 3.10、3.11、3.12 和 3.13 运行 ruff 和 pytest。工作流定义位于 `.github/workflows/test.yml`。此 README 顶部的状态徽章反映了最近一次 CI 运行的结果。
## 使用方法
可以通过两种方式调用该工具。两者产生相同的输出。
### 作为控制台命令(推荐)
```
osint-recon example.com
osint-recon example.com -o report.txt
osint-recon example.com --no-http
osint-recon example.com --no-email-security
```
### 作为 Python 模块
```
python -m osint_recon example.com
python -m osint_recon example.com -o report.txt
```
### 标志
| 标志 | 用途 |
|------|---------|
| `-o FILE`, `--output FILE` | 将报告保存为纯文本文件 |
| `--no-http` | 跳过 HTTP/HTTPS 探测 |
| `--no-email-security` | 跳过电子邮件身份验证审计 (SPF/DMARC/DKIM/BIMI) |
## 输出示例
```
+==============================================+
| OSINT Domain Recon Tool |
| github.com/Jorgy762 |
| For authorized use only |
+==============================================+
[*] Target : example.com
[*] Started: 2026-05-31 22:53:29
[*] Resolving IP Address...
[+] IP Address : 93.184.216.34
[*] Looking up registration data (RDAP)...
[+] Source: RDAP
[+] Registrar: ICANN
[+] Creation Date: 1995-08-14 04:00:00
[+] Expiration Date: 2025-08-13 04:00:00
[+] Name Servers: a.iana-servers.net, b.iana-servers.net
[+] DNSSEC: signedDelegation
[*] Enumerating DNS Records...
[+] A Records:
- 93.184.216.34
[+] MX Records:
- 0 .
[+] NS Records:
- a.iana-servers.net.
- b.iana-servers.net.
[+] TXT Records:
- "v=spf1 -all"
[*] Service Verifications (TXT-token fingerprints):
[+] Microsoft 365 / Azure AD tenant (token: ms)
[*] Auditing Email Security...
[+] SPF: v=spf1 -all
Policy on `all` : -all (HARD FAIL, recommended)
DNS lookups (chain) : 0 / 10 (RFC 7208 limit)
Void lookups : 0 / 2 (RFC 7208 limit)
[+] DMARC: v=DMARC1; p=reject; pct=100; rua=mailto:reports@example.com
Policy : p=reject
[*] Probing 29 common DKIM selectors...
[+] DKIM selector 'selector1' found: v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0...
[-] No BIMI record at default._bimi.example.com
[*] Checking HTTP/HTTPS Status...
[+] HTTP Status: 200 | Server: ECS | Final URL: https://www.example.com/
[*] Scan complete: 2026-05-31 22:53:33
[*] Remember: only run this tool against domains you own or have permission to test.
```
## 项目结构
```
osint-domain-recon/
├── src/
│ └── osint_recon/
│ ├── __init__.py # Package metadata, version lookup
│ ├── __main__.py # Entry point for python -m osint_recon
│ ├── cli.py # Argparse, dependency check, main coordinator
│ ├── constants.py # Regex, lookup tables, RFC 7208 limits
│ ├── utils.py # Display helpers (_format_value, _print_fields)
│ ├── validation.py # Domain input validation, startup banner
│ ├── registration.py # RDAP lookup with WHOIS fallback
│ ├── dns_enum.py # IP resolution, DNS records, service token classifier
│ ├── email_security.py # SPF, DMARC, DKIM, BIMI auditors
│ ├── http_probe.py # HTTP/HTTPS availability checks
│ └── reporting.py # Plaintext report writer
├── tests/ # Pytest test suite (added in v0.3.0)
├── pyproject.toml # Package definition (PEP 621)
├── CHANGELOG.md # Version history (Keep a Changelog format)
├── README.md # This file
└── .gitignore
```
查看 [CHANGELOG.md](CHANGELOG.md) 了解完整的版本历史。
## 设计原则
- **仅限授权使用。** 该工具和所有文档都明确说明了这一点。
- **优雅的错误处理。** 每个网络调用都包含在 try/except 中,并输出有意义的提示。
- **对局限性保持坦诚。** DKIM 探测明确说明“未找到”意味着“在常见 selector 中未找到”,而不是“DKIM 不存在”。任何假装能提供其无法交付的绝对事实的工具,都比承认自身局限性的工具更糟糕。
- **CLI 优先。** 没有 GUI,没有 Web 界面。保持为一个纯粹的命令行工具。
- **注释详尽。** 代码不仅应该让经验丰富的开发者读懂,更应该让学习 Python 的人也能读懂。
- **模块化结构。** 每个扫描阶段都位于自己的 module 中,使得该工具在扩展时具有可测试性和可维护性。
## 路线图
未来可能的新增功能:
- [ ] 覆盖纯逻辑辅助工具的 Pytest 测试套件(计划在 v0.3.0 中推出)
- [ ] 子域名枚举(wordlist 结合证书透明度日志查询)
- [ ] SSL/TLS 证书检查(过期时间、颁发者、SAN、密码信息)
- [ ] 集成 Shodan API 获取开放端口数据
- [ ] JSON 报告导出选项
- [ ] Banner 抓取
## 免责声明
本工具仅供教育目的和授权侦察使用。仅对您拥有或获得明确书面测试许可的域名运行此工具。未经授权的使用可能会违反相关法律,包括《加拿大刑法典》(第 342.1 条)及其他司法管辖区的同等法规。
## 作者
**Jorgy762** | [GitHub](https://github.com/Jorgy762)
认证:ISC2 Certified in Cybersecurity | Certified Zero Trust Practitioner | Certified Threat & Malware Analysis | Fortinet Certified Associate in Cybersecurity | OSINT Certificate (WithYouWithMe) | CSA Trusted AI Safety Expert | Microsoft AZ-900 Azure Fundamentals
标签:DNS解析, GitHub, Python, 域名侦察, 安全规则引擎, 实时处理, 开源项目, 无后门, 逆向工具, 邮件安全审计