BrunoAFK/recon-web
GitHub: BrunoAFK/recon-web
一款可自托管的开源全方位网站侦察工具,能够快速扫描并分析网站的安全配置、DNS、性能及技术栈。
Stars: 0 | Forks: 0
# recon-web
扫描任何网站并在几秒钟内全面了解其安全性、DNS、性能和技术栈。
开源、可自托管、无需账号。
## 快速开始
### 单行命令(仅 CLI)
```
docker run --rm ghcr.io/brunoafk/recon-web/cli scan example.com
```
无需设置,无需克隆 —— 直接扫描。
### Docker(完整 UI + API)
```
git clone https://github.com/BrunoAFK/recon-web.git
cd recon-web
cp .env.example .env
docker compose up
```
打开 **http://localhost:8080** 并输入任意 URL。完成。
### 不用 Docker?从源码运行
需要 Node.js 24+。
```
git clone https://github.com/BrunoAFK/recon-web.git
cd recon-web
npm install
npm run dev # API on http://localhost:3000
npm run dev:web # UI on http://localhost:5173 (separate terminal)
```
## 你将获得
输入 URL,recon-web 将在 6 个类别中运行 **39 项检查**。结果实时流式传输 —— 无需等待所有任务完成。
### 安全(12 项检查)
| 检查项 | 作用 |
|-------|-------------|
| **SSL 证书** | 读取 TLS 证书:颁发者、到期日期、信任链 |
| **SSL 评级** | 对 TLS 配置进行 A+ 到 F 的评级(协议、套件、证书、HSTS) |
| **TLS 配置** | 协议版本、密码套件、证书有效性 |
| **HSTS** | 检查 Strict-Transport-Security 头和预加载状态 |
| **HTTP 安全头** | 评分 CSP、X-Frame-Options、X-Content-Type-Options 等 |
| **防火墙** | 检测 WAF 提供商(Cloudflare、AWS WAF、Akamai...) |
| **security.txt** | 检查漏洞披露策略 |
| **威胁** | Google Safe Browsing + 恶意软件数据库 |
| **拦截列表** | 检查 17 个 DNS 拦截列表以发现声誉问题 |
| **VirusTotal** | 使用 70+ 杀毒引擎扫描(需要 API 密钥) |
| **AbuseIPDB** | IP 声誉和滥用历史(需要 API 密钥) |
| **WordPress** | 检测 WP 安装、暴露文件、插件/主题版本 |
### DNS(5 项检查)
| 检查项 | 作用 |
|-------|-------------|
| **DNS 记录** | A、AAAA、MX、NS、TXT、CNAME、SOA、SRV、PTR 记录 |
| **DNS 提供商** | 识别名称服务器提供商和 DoH 支持 |
| **DNSSEC** | 验证 DNSKEY、DS 和 RRSIG 记录 |
| **TXT 记录** | 解析 SPF、DKIM、域名验证条目 |
| **邮件配置** | MX 记录、邮件提供商、SPF/DMARC 分析 |
### 网络(8 项检查)
| 检查项 | 作用 |
|-------|-------------|
| **HTTP 状态** | 状态码和响应时间 |
| **HTTP 头** | 完整的响应头转储 |
| **Cookies** | Cookie 名称、标志(Secure、HttpOnly、SameSite) |
| **重定向** | 跟随完整的重定向链 |
| **开放端口** | 扫描常见端口(SSH、HTTP、HTTPS、MySQL、RDP...) |
| **IP 地址** | 解析域名的 IP |
| **服务器位置** | GeoIP 查询 —— 国家、城市、坐标 |
| **Traceroute** | 从服务器到目标的网络跳数 |
### 内容(5 项检查)
| 检查项 | 作用 |
|-------|-------------|
| **robots.txt** | 解析允许/禁止的路径和爬取指令 |
| **站点地图** | 查找并解析 XML 站点地图(首先检查 robots.txt) |
| **社交标签** | OpenGraph、Twitter Cards、元描述、预览图 |
| **关联页面** | 统计并列出内部和外部链接 |
| **SEO 审计** | 标题、标题层级、图片、规范、结构化数据、评分 |
### 元信息(7 项检查)
| 检查项 | 作用 |
|-------|-------------|
| **WHOIS** | 域名注册商、注册日期、到期日期、名称服务器 |
| **归档历史** | Wayback Machine 快照计数和日期范围 |
| **域名排名** | Tranco 前 100 万热门度排名 |
| **旧版排名** | Cisco Umbrella 排名 |
| **功能** | BuiltWith 功能检测(需要 API 密钥) |
| **技术栈** | 从 HTML 中检测框架、CMS、CDN、分析工具 |
| **截图** | 页面视觉捕获(需要 Chromium) |
### 性能(2 项检查)
| 检查项 | 作用 |
|-------|-------------|
| **碳足迹** | 页面权重、CO2 估算、绿色托管检查 |
| **PageSpeed** | Google Lighthouse 评分(需要 API 密钥) |
## 如何使用
### Web UI
1. 输入 URL 并点击 **Scan**
2. 每项检查完成后,结果会实时显示
3. 按 **类别** 过滤
4. 按 **状态** 过滤,以快速发现问题
5. 按 A-Z / Z-A 排序以查找特定检查项
6. 点击任意卡片上的 **info 图标** 查看检查内容的解释
7. 点击 **code 图标** 查看原始 JSON 数据
### 历史记录与报告
- 所有扫描会自动保存
- 在 **History** 页面浏览过往扫描
- **并排对比** 两次扫描,查看变化
- **下载** HTML 或 PDF 报告,与团队共享
### REST API
交互式文档位于 **http://localhost:3000/docs** (Swagger UI)。
```
# 全扫描
curl "http://localhost:3000/api?url=example.com"
# 单次检查
curl "http://localhost:3000/api/dns?url=example.com"
curl "http://localhost:3000/api/ssl?url=github.com"
# 实时流 (SSE)
curl "http://localhost:3000/api/stream?url=example.com"
# 列出所有可用检查
curl "http://localhost:3000/api/handlers"
```
### CLI
```
# 带彩色输出的全扫描
npx recon-web scan example.com
# JSON 输出
npx recon-web scan --json example.com
# 单次检查
npx recon-web dns example.com
# 用于 CI/CD 的 JUnit XML
npx recon-web scan --format junit example.com
# 如果 SSL 过期则使构建失败
npx recon-web scan --fail-on ssl:expired example.com
# 与上一次扫描进行比较
npx recon-web scan --json example.com > baseline.json
npx recon-web scan --diff baseline.json example.com
```
或通过 Docker:
```
docker run --rm ghcr.io/brunoafk/recon-web/cli scan example.com
```
## 安全性
recon-web v1.2.0+ 包含以下特性:
- **SSRF 防护** — 所有分析处理程序都会根据 IP 白名单验证 URL(禁止 RFC1918、禁止链路本地、禁止云元数据),并将连接固定到验证后的 IP 以抵御 DNS 重绑定。如果你有意想要扫描内部主机(仅限实验室环境),请设置 `RECON_ALLOW_PRIVATE_IPS=1`。
- **Chromium 沙箱** — 截图处理程序运行启用了 user-namespace 沙箱的 Chromium。容器需要 `SYS_ADMIN` + `seccomp=unconfined`(已包含在配套的 compose 文件中)。
- **非 root 容器** — 所有镜像以非特权用户身份运行,并使用只读 rootfs 和已移除的权限。
- **严格的 CSP** — Web 前端附带严格的 Content-Security-Policy。
- **已签名镜像** — 发布镜像通过 GitHub Actions OIDC 进行 cosign 签名。在生产环境拉取前请验证。
若要报告安全问题,请在 GitHub 上开启私有安全公告,而不是公开 issue。
## 配置
将 `.env.example` 复制为 `.env`。所有选项均为可选 —— 应用程序无需任何 API 密钥即可开箱即用。
### API 密钥(可选)
所有检查均可无需密钥运行。添加密钥可启用额外检查或移除速率限制:
| 变量 | 解锁功能 |
|----------|----------------|
| `GOOGLE_CLOUD_API_KEY` | PageSpeed Insights + Google Safe Browsing |
| `VIRUSTOTAL_API_KEY` | VirusTotal 扫描(免费:500 次/天) |
| `ABUSEIPDB_API_KEY` | AbuseIPDB 声誉(免费:1,000 次/天) |
| `CLOUDMERSIVE_API_KEY` | 恶意软件扫描 |
| `BUILT_WITH_API_KEY` | BuiltWith 功能检测 |
| `TRANCO_API_KEY` | Tranco 域名排名 |
### 身份验证
```
AUTH_ENABLED=true
AUTH_TOKEN=your-secret-token
```
所有 `/api/*` 路由都需要 `Authorization: Bearer `。Web UI 会显示登录页面。
### 定时扫描与告警
```
SCHEDULE_ENABLED=true
SCHEDULE_CRON=0 0 * * *
SCHEDULE_URLS=https://example.com,https://mysite.com
# Telegram (可选)
TELEGRAM_BOT_TOKEN=123456:ABC-DEF
TELEGRAM_CHAT_ID=987654321
# Email (可选)
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
SMTP_USER=you@gmail.com
SMTP_PASS=app-password
NOTIFY_EMAIL=alerts@example.com
```
调度器按 cron 计划运行扫描,与之前的结果进行比较,并在发生变化时发送告警(SSL 过期、头移除、DNS 变更等)。
请参阅 [`.env.example`](.env.example) 了解包含默认值的所有选项。
## 部署
| 方式 | 指南 |
|--------|-------|
| Docker Compose(从源码构建) | [docs/deploy-docker-local.md](docs/deploy-docker-local.md) |
| Docker Compose(预构建镜像) | [docs/deploy-docker-remote.md](docs/deploy-docker-remote.md) |
| Kubernetes (Helm) | [docs/deploy-kubernetes.md](docs/deploy-kubernetes.md) |
| 独立运行(Node.js,无 Docker) | [docs/deploy-standalone.md](docs/deploy-standalone.md) |
## 开发
请参阅[开发指南](docs/DEVELOPMENT.md)了解架构、运行测试和贡献方式。
## 许可证
[GPL-2.0-only](LICENSE) — 可自由使用、修改和分发。
标签:AbuseIPDB, Ask搜索, C2日志可视化, CDN识别, DNS枚举, DNS查询, Docker, GNU通用公共许可证, HSTS, HTTPS评级, MITM代理, Node.js, Recon, SSL检测, TLS配置, VirusTotal, Web安全, Web界面, WordPress检测, 二进制发布, 信誉检测, 域名黑名单, 安全头检测, 安全扫描, 安全防御评估, 开源工具, 性能监控, 技术栈识别, 指纹识别, 文件查看, 时序注入, 网站速度, 网络安全工具, 自动化攻击, 自托管, 蓝队分析, 请求拦截, 资产测绘, 防火墙识别