isneoz1/webcap

GitHub: isneoz1/webcap

通过 CDP 驱动真实浏览器捕获并解密完整网络流量,附带被动安全审计功能的开源 Rust 工具。

Stars: 1 | Forks: 0

webcap

指向一个 URL。获取它的所有网络流量——已解密。

Rust MIT Platform by NEOZ

`webcap` 通过 DevTools Protocol 驱动真实的 Chrome/Edge,并记录页面发起的**每一个** request。浏览器负责处理 TLS,因此您可以获得**已解密的 HTTPS**——完整的 request/response body——**无需代理,也无需安装证书**。给它一个或多个 URL;它会实时捕获所有内容,并生成一个带主题的 HTML 仪表板。

webcap dashboard

## 功能 - 🔓 **解密 HTTPS** — 明文查看 request 与 response body,无需 MITM 设置 - 🌐 **一切内容** — XHR/fetch、scripts、images、fonts、iframes、**workers**、WebSocket frames - 🍪 **Headers、cookies、`Set-Cookie`**、重定向、远程 IP、TLS 证书与计时 - 🐛 **Console 日志与 JS 错误**,与网络请求一同捕获 - 🛡️ **被动安全审计** — 真实、有证据支撑的发现结果(无误报 fuzzing) - 🕸️ **同源爬虫** (`--crawl`) 覆盖整个站点 - ⚡ **实时** — 每个 body 在下载完成的瞬间被抓取,以流式传输到 `live.jsonl`,**零重复** - 📊 **带主题的 HTML 仪表板** — 可搜索、可过滤、独立且离线可用 - 💾 **JSON / JSONL / HAR** 输出(HAR 可在 Chrome 与 Firefox DevTools 中打开) - 👁️ 用于 SSE/long-poll 的 **Watch 模式**,使用 **`--save-assets`** 将每个 response 提取到磁盘 ## 安全审计 每次运行都会对捕获的流量进行被动审计,并**仅报告真实、有证据支撑的问题**——每条发现结果都会引用浏览器观察到的确切 header、cookie、body 或 TLS 参数,因此实际上不存在误报。绝对不会发送任何攻击 payload。

webcap security audit

检查内容包括:缺失/脆弱的**安全 headers**(CSP、HSTS、X-Frame-Options、nosniff、Referrer-Policy)、**不安全的 cookies**(Secure/HttpOnly/SameSite)、response 中**泄露的 secrets 与 API keys**、**混合内容**、详细的 **error/stack-trace 与 SQL-error 泄露**、**目录列表**、暴露的 **source maps 及敏感文件**(`.env`、`.git` 等)、具有已知 CVE 的**过时 JS 库**、**脆弱的 TLS**,以及明文 **HTTP**。发现结果将被写入 `audit.json` 并显示在仪表板的 **AUDIT** 标签页中。 ## 快速开始 需要 [Rust 工具链](https://rustup.rs)以及已安装的 Chrome/Edge。 ``` git clone https://github.com/isneoz1/webcap cd webcap cargo install --path . # installs the `webcap` command webcap https://example.com --open # capture + open the dashboard ``` ## 示例 ``` # 基础 — 捕获站点并打开 dashboard webcap https://example.com --open # 无需 scheme(默认为 https://) webcap example.com # 在一次运行中处理多个 URL webcap https://a.com https://b.com https://c.com # 输出格式 webcap https://example.com --format json # default: one document webcap https://example.com --format jsonl # one line per request webcap https://example.com --format har # opens in DevTools / Charles # 自定义输出目录 webcap https://example.com -o my-capture # 抓取整个站点(跟随同源链接 2 层深度,最多 100 个页面) webcap https://example.com --crawl 2 --max-pages 100 # 跳过 security audit webcap https://example.com --no-audit # Watch 模式:固定时间记录(SSE / long-poll / 实时页面) webcap https://example.com --duration-ms 60000 # 调整 idle detection 和硬性时间上限(毫秒) webcap https://example.com --settle-ms 3000 --max-wait-ms 45000 # 多个 URL 之间的暂停 webcap https://a.com https://b.com --delay-ms 1000 # 限制带宽(kbit/s) webcap https://example.com --throttle-kbps 512 # 将每个响应体提取到文件(assets/) webcap https://example.com --save-assets # 限制每个响应体的大小(字节) webcap https://example.com --max-body-bytes 1000000 # 伪装 User-Agent webcap https://example.com --user-agent "Mozilla/5.0 (iPhone; CPU iPhone OS 17_0)" # 指定特定的浏览器 webcap https://example.com --chrome "C:\Program Files\Google\Chrome\Application\chrome.exe" # 显示浏览器窗口(调试) webcap https://example.com --headful # 精简捕获/生成的内容 webcap https://example.com --no-bodies # skip response bodies webcap https://example.com --no-console # skip console / JS errors webcap https://example.com --no-scroll # don't auto-scroll webcap https://example.com --no-stream # don't write live.jsonl webcap https://example.com --no-report # don't generate report.html webcap https://example.com --quiet # no per-request output # Kitchen sink webcap https://example.com https://api.example.com \ --format har -o full-run --duration-ms 30000 \ --save-assets --throttle-kbps 1024 --open ``` ## 所有选项 | 选项 | 描述 | 默认值 | |---|---|---| | `...` | 一个或多个要捕获的页面(缺少 scheme 时默认为 `https://`) | — | | `-o, --out ` | 输出目录 | `webcap-out` | | `--format ` | `json` \| `jsonl` \| `har` | `json` | | `--settle-ms ` | 结束页面抓取的空闲窗口时间 | `2000` | | `--max-wait-ms ` | 每个页面的硬性时间上限 | `30000` | | `--duration-ms ` | Watch 模式:记录 N 毫秒,忽略空闲时间 | off | | `--crawl ` | 跟踪同源链接 N 层深度(整个站点) | `0` | | `--max-pages ` | 爬取时最多访问的页面数 | `50` | | `--delay-ms ` | URL 之间的暂停时间 | `0` | | `--throttle-kbps ` | 节流带宽 (kbit/s) | off | | `--max-body-bytes ` | 单个 body 的体积上限 | `5000000` | | `--save-assets` | 将所有 response body 转储到 `assets/` | off | | `--open` | 完成后打开 HTML 报告 | off | | `--no-audit` | 跳过被动安全审计 | — | | `--no-bodies` | 跳过获取 response bodies | — | | `--no-console` | 跳过 console / JS 错误捕获 | — | | `--no-scroll` | 不自动滚动页面 | — | | `--no-stream` | 不写入 `live.jsonl` | — | | `--no-report` | 不生成 `report.html` | — | | `--headful` | 显示浏览器窗口 | headless | | `--chrome ` | 要使用的浏览器可执行文件 | auto | | `--user-agent ` | 覆盖 User-Agent | 浏览器默认值 | | `-q, --quiet` | 屏蔽每个 request 的输出 | — | | `-h, --help` | 显示帮助信息 | — | ## 输出 (`webcap-out/`) | 文件 | 内容 | |---|---| | `report.html` | 带主题的仪表板 — Requests、**Audit**、Console 与 Cookies 标签页 | | `audit.json` | 包含严重程度、证据与修复建议的安全发现 | | `live.jsonl` | 实时流,每个 request 一行 JSON | | `capture.json` · `.har` · `.jsonl` | 所选 `--format` 格式的完整捕获内容 | | `assets/…` | 作为文件保存的每一个 response body (`--save-assets`) | ## 工作原理 启动带有临时 DevTools 端口的无头 Chrome,通过 WebSocket 连接(纯 Rust 实现——无需原生 TLS stack,由浏览器掌控 TLS),启用 `Network`/`Page`/`Runtime`/`Log` 域,自动附加到子 frames 和 workers 进行导航,然后将每个事件流式传输到有序且去重的捕获记录中,并在完成时提取每个 body。 ## 授权使用 仅对**您拥有或明确授权测试**的站点捕获流量。`webcap` 仅记录它在您机器上启动的浏览器的流量——它绝不会拦截任何其他人的连接。 ## 许可证 MIT © 2026 **NEOZ** ([isneoz1](https://github.com/isneoz1))
标签:CDP协议, HTTPS解密, Rust, Snort++, Web安全审计, 可视化界面, 多模态安全, 网络流量审计, 网络流量抓包, 自动化爬虫, 被动扫描, 通知系统