muksri1/domain-recon
GitHub: muksri1/domain-recon
一款被动式域名安全控制审查工具,通过 Web 仪表盘和 CLI 对域名的 DNS、邮件认证、TLS、HTTP 安全标头等配置进行评分,帮助用户快速评估并改善域名安全态势。
Stars: 0 | Forks: 0
# 🛡️ Domain Recon — 安全控制审查
[](https://github.com/muksri1/domain-recon/actions/workflows/ci.yml)
[](LICENSE)
[](https://www.python.org/)
一款轻量级工具,接收**域名**并审查其周边发布的**安全控制**,然后将结果呈现为带有 **CSV 导出**功能的 **Web 仪表盘**。专为学习研究和防御性安全态势检查而构建。
它执行的所有操作都是**被动**的:仅读取公开可用的数据和目标自身发布的记录。它**不进行任何漏洞利用、暴力破解或侵入性扫描**。请仅在你拥有或获得授权评估的域名上使用它。

## 审查内容
| 类别 | 审查的控制项 |
|----------|-------------------|
| **DNS 足迹** | A / AAAA / MX / NS 记录、域名服务器冗余性与多样性、IPv6 |
| **电子邮件身份验证** | SPF(策略强度)、DMARC(策略与报告)、DKIM(常用选择器发现) |
| **DNS 完整性** | DNSSEC 签名、CAA 颁发限制 |
| **TLS / 证书** | 证书有效性与过期时间、颁发者、SAN、协商协议、旧版 TLS 1.0/1.1 支持 |
| **HTTP 安全标头** | HSTS、CSP、X-Frame-Options、X-Content-Type-Options、Referrer-Policy、Permissions-Policy、HTTP→HTTPS 跳转、Cookie 标志、信息泄露标头 |
| **域名注册** | 注册商、注册与过期日期、注册商锁定、注册局 DNSSEC 委派(通过 RDAP) |
| **攻击面** | 从公共证书透明度日志(crt.sh)中发现的子域名、看似敏感的主机名 |
每项发现都会获得一个状态(**PASS / WARN / FAIL / INFO**)、严重程度、通俗的解释以及修复建议。整体的 **0–100 评分和字母等级** 概括了安全态势。
## 快速开始
```
# 安装依赖 (Python 3.9+)
pip install -r requirements.txt
# 启动 dashboard
python app.py
# 打开 http://127.0.0.1:5000 并输入 domain
```
更喜欢使用 **容器**?无需本地 Python 环境:
```
docker build -t domain-recon .
docker run --rm -p 5000:5000 domain-recon # open http://localhost:5000
```
想把 **CLI 加入你的 PATH**?安装该软件包:
```
pip install .
domain-recon example.com --csv out.csv
```
### 命令行
```
python cli.py example.com # print a report to the terminal
python cli.py example.com --csv out.csv # also save findings as CSV
python cli.py example.com --json out.json # also save the full report as JSON
```
当任何控制项出现 **FAIL** 时,CLI 将以非零状态退出,因此它可以作为 CI pipeline 的拦截门禁。
### 无需扫描进行体验
打开 **http://127.0.0.1:5000/?demo=1** 查看离线示例报告,或者分享一个**深链接**(如 `http://127.0.0.1:5000/?domain=example.com`)以自动运行扫描。
## HTTP API
| Endpoint | 描述 |
|----------|-------------|
| `GET /api/scan?domain=example.com` | JSON 报告 |
| `GET /api/scan.csv?domain=example.com` | CSV 下载 |
| `GET /api/demo` | 内置示例报告(离线) |
| `GET /healthz` | 健康检查 |
## 项目布局
```
app.py Flask web server (dashboard + JSON/CSV API)
cli.py Command-line runner
reconlib/
scanner.py Orchestrates all checks (parallel, time-bounded), scores results
models.py Finding model, scoring
utils.py Domain normalization, DNS resolver
export.py CSV serialization
demo.py Offline sample report for demo mode
checks/ One module per control family
templates/index.html Dashboard markup
static/style.css Dashboard styling (light/dark aware)
static/app.js Dashboard logic + client-side CSV export
tests/ Offline unit tests
Dockerfile Container image for the dashboard
.github/workflows/ CI: ruff lint + pytest on Python 3.9–3.12
```
## 开发
```
pip install -e ".[dev]" # install with ruff + pytest
ruff check . # lint
pytest -q # run the offline test suite
```
## 评分机制
每项检查初始赋予域名 100 分。未通过的发现会根据状态和严重程度扣除相应的惩罚分数(例如,像缺少 SPF 记录这样的高严重性 FAIL 比低严重性的 WARN 扣除更多分数)。最终结果将映射到一个字母等级:A ≥ 90,B ≥ 80,C ≥ 70,D ≥ 60,否则为 F。INFO 级别的发现绝不会影响分数——它们仅用于描述足迹和攻击面,而不是缺陷。
## 注意事项与局限性
- **DKIM** 使用特定于提供商的选择器名称,因此在探测中未发现记录并不能证明未配置 DKIM —— 该项将被报告为 INFO,而不是 FAIL。
- **crt.sh** 可能会响应缓慢或受到速率限制;该项检查会降级为 ERROR 状态的发现,而不是导致整个扫描失败。
- 需要具备对 DNS、目标 80/443 端口、`rdap.org` 和 `crt.sh` 的网络出站访问权限。
## 许可证
MIT — 详见 [LICENSE](LICENSE)。
标签:GitHub, Python, 安全合规, 安全工具库, 实时处理, 无后门, 网络代理, 网络安全, 被动侦察, 请求拦截, 逆向工具, 防御态势评估, 隐私保护