Skip to content
valdererPublic

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

12 Commits

Folders and files

Repository files navigation

Traffix

一个基于 Rust 的本地 HTTP/HTTPS 抓包工具,当前桌面端使用 Tauri 2、React 和 TypeScript 构建。

它在本机启动 127.0.0.1:8080 代理,通过本地 CA 解密 HTTPS 流量,并在桌面窗口中查看请求、响应、Header 和 Body。

仅用于你拥有或已获得明确授权的设备、服务和流量。HTTPS MITM 能看到 Cookie、Token、表单和响应正文等敏感数据;当前版本不适合作为默认开启抓包的正式公开发布版本。

当前能力

  • HTTP/1.1 HTTP/HTTPS 代理与 HTTPS MITM。
  • 请求列表、详情页、请求/响应 Header 与 Body、JSON 格式化显示。
  • Host、方法、状态码和静态资源过滤。
  • 请求重放(Replay)、请求断点(Intercept)和按 URL 匹配的 Mock 响应。
  • macOS 与 Windows 一键开启/关闭系统 HTTP 和 HTTPS 代理。
  • 会话只保存在内存,关闭应用或点击 Clear 后清空。

当前不支持 HTTP/2、HTTP/3/QUIC、WebSocket 深度解析或会话持久化。某些启用证书绑定或反爬策略的网站可能不能通过 MITM 正常访问。

首次运行(macOS)

1. 安装依赖

需要 Rust、Node.js 22 和 Xcode Command Line Tools:

xcode-select --install
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source "$HOME/.cargo/env"

通过 nvm 安装并启用 Node.js 22:

nvm install 22
nvm use 22
node --version
rustc --version

2. 获取项目并安装前端依赖

git clone <repository-url> traffix
cd traffix
make web-install

make web-install 根据 package-lock.json 安装 React、Vite 和 Tauri 前端依赖。Rust 依赖会在第一次启动时由 Cargo 自动下载并编译。

3. 启动桌面应用

make desktop-dev

首次编译时间较长,之后会打开 Traffix 桌面窗口。开发中,前端修改会由 Vite 热更新;Rust/Tauri 修改会触发重新编译和应用重启。停止运行使用终端中的 Control + C。

若提示 failed to bind proxy listener at 127.0.0.1:8080,说明已有 Traffix 进程或其他程序占用了 8080 端口。先在原来的终端按 Control + C;找不到终端时可执行:

lsof -nP -iTCP:8080 -sTCP:LISTEN
kill <PID>

其中 <PID> 是第一条命令输出中的进程号。确认该进程确实是旧的 Traffix 后再结束它。

信任本地 HTTPS 证书

桌面应用首次打开时会提示生成 Local CA。点击 Generate local CA 后,证书位于:

~/Library/Application Support/Traffix/ca.crt

在 Finder 或终端中打开它:

open "$HOME/Library/Application Support/Traffix/ca.crt"

在“钥匙串访问”中将 Traffix local CA 添加到“登录”钥匙串。双击该证书,展开“信任”,把“使用此证书时”设为“始终信任”。完成后完全退出并重新打开 Chrome 或其他浏览器(Command + Q)。

没有信任该证书时,浏览器会显示 ERR_CERT_AUTHORITY_INVALID,这是 HTTPS MITM 的预期保护行为,不应绕过证书警告继续登录或提交敏感信息。

使用桌面应用

  1. 打开桌面窗口后,先生成并信任 Local CA。
  2. 点击顶部的 Stopped,它会变为绿色的 Capturing,开始抓包。
  3. 此开关会将系统 HTTP 和 HTTPS 代理设为 127.0.0.1:8080,浏览器流量会自动进入 Traffix。macOS 使用当前 Wi-Fi 网络服务;Windows 使用当前用户的 Internet Settings,无需管理员权限。
  4. 左侧列表按最新请求在上方排序。使用 Filters 按 Host、Method、Status 过滤,或隐藏静态资源。
  5. 点击一个请求,在右侧查看 Overview、请求/响应 Header、Body 和原始 JSON。
  6. 结束时再次点击 Capturing,使其回到 Stopped。这会停止抓包并关闭 Traffix 设置的系统代理。

开始抓包会覆盖原有的 HTTP/HTTPS 系统代理配置,停止时只会关闭 Traffix 代理,不会恢复原有代理地址。使用 Clash、公司代理或其他系统代理前,请先记录原配置。异常退出时,macOS 可在“系统设置 -> 网络 -> Wi-Fi -> 详情 -> 代理”中检查;Windows 可在“设置 -> 网络和 Internet -> 代理”中关闭手动代理。

Clash TUN 可以保持开启:Traffix 接收浏览器的本地代理流量,其后续外连通常会经过 TUN。若遇到无法访问、证书固定或风控页面,应先停止抓包,或将该域名排除在 HTTPS MITM 之外(目前此项通过 CLI 配置)。

重放、断点和 Mock

  • 选中任意已捕获的 HTTP/HTTPS 请求,点击右侧请求方法旁的 Replay。可修改 Method、URL、Header 和 Body 后发送;重放结果会作为一条新会话写入列表,来源显示为本机。
  • 顶部开启 Intercept 后,新的已解密 HTTP/HTTPS 请求会在转发到上游前暂停。右下角出现提示后点击 Review,可以编辑请求并 Forward,或 Drop。断点不会作用于被排除 MITM 的 HTTPS 隧道;它们的内容对代理不可见。
  • 顶部的 Mock 可添加规则。规则按 Method(可留空)和“URL contains”匹配,命中时不会访问上游,而是直接返回规则中配置的 Status、Header 和 Body。Mock Body 始终按编辑器中的未压缩文本保存;需要模拟 gzip 时,在 Header 加 content-encoding: gzip,程序会自动压缩 Body 并重算 content-length。

这三项规则与开关当前只保存在内存中,重启应用后会清空。开启 Intercept 后,未处理的请求会持续等待并可能让页面或 App 卡住;调试完成后应及时关闭。

手机抓包(同一 Wi-Fi)

桌面端顶部最右侧的 Mobile 可开启“允许局域网设备连接”模式。默认关闭;开启后代理会从仅本机监听的 127.0.0.1:8080 切换为局域网监听,同时仍只接受私有网络来源的连接。

  1. 让手机和运行 Traffix 的电脑连接同一个 Wi-Fi。
  2. 在桌面端点击 Mobile,勾选 Allow Wi-Fi devices。
  3. 弹窗会显示 Server 和 Port。在手机当前 Wi-Fi 的代理设置中选择“手动”,填入这个地址和 8080。
  4. 要查看 HTTPS 内容,还需要将桌面端生成的 ca.crt 安装到手机并信任。iPhone/iPad 安装描述文件后,还需要在“设置 -> 通用 -> 关于本机 -> 证书信任设置”中启用完全信任;Android 的证书信任和第三方 App 是否接受用户 CA 取决于系统和 App 配置。
  5. 用完后取消勾选 Allow Wi-Fi devices,再在手机 Wi-Fi 设置中关闭手动代理。

这个模式不会开启或关闭 Mac 的系统代理,因此不会改变电脑当前的 Clash 链路。macOS 防火墙若阻止入站连接,需要允许 Traffix 接收 8080 端口的本地网络连接。不要在公共、不可信 Wi-Fi 上长时间开启此模式;任何可连接到你的局域网设备都可能通过该代理产生流量,而 HTTPS 抓包可能包含 Cookie、Token 和正文内容。

Windows

桌面 UI 可以在 Windows 构建和运行,但当前“开始/停止抓包”自动控制系统代理仅实现了 macOS。因此 Windows 上需要手动生成并信任证书、手动设置系统代理。

前置条件:安装 Rust、Node.js 22 LTS、Microsoft C++ Build Tools 和 Microsoft Edge WebView2 Runtime(Windows 11 通常已自带)。PowerShell 中首次运行:

git clone <repository-url> traffix
cd traffix
npm --prefix desktop/web install
cd desktop/src-tauri
../web/node_modules/.bin/tauri.cmd dev

在应用中生成证书后,可按 Win + R,输入 certmgr.msc,将 ca.crt 导入“受信任的根证书颁发机构 -> 证书”。证书通常在:

%LOCALAPPDATA%\Traffix\ca.crt

然后在 Windows 系统代理中手动将 HTTP 和 HTTPS 代理设为 127.0.0.1:8080,绕过地址加入 localhost;127.0.0.1;::1。停止抓包后手动关闭这些代理。

构建安装包

本机构建

先在本机验证当前平台的安装包:

make desktop-build

Tauri 会先构建前端,再生成当前平台的安装包。产物位于:

desktop/src-tauri/target/release/bundle/

在 macOS 上会生成 .dmg,Windows 上会生成 .msi 和 .exe 安装包。Tauri 不能可靠地在一个平台上交叉构建另一个平台的安装包,因此 macOS 包应在 macOS 构建,Windows 包应在 Windows 构建。

当前项目不包含 CI/CD 或自动发布配置。需要测试安装包时,在对应操作系统上执行 make desktop-build。不要将本机生成的 ca.crt、ca.key 或包含抓包内容的文件打包、上传或提交到仓库。

项目结构

crates/hunter-core/   共享代理、HTTPS MITM、证书和会话核心
desktop/web/          React + TypeScript + Vite 界面
desktop/src-tauri/    Tauri 桌面壳和 Rust 命令

安全说明

  • 默认代理只监听 127.0.0.1,不会直接暴露到局域网;只有手动开启 Mobile 后才会监听局域网,并拒绝公网来源的客户端。
  • 会话目前只放在内存中,但抓包期间任何能访问应用窗口的本机用户都可看到其内容。
  • HTTPS MITM 的本地 CA 私钥位于应用数据目录。不要分享该私钥,也不要在不可信设备上信任该 CA。
  • 当前配置中的 Header 脱敏和 Body 大小限制尚未完整接入所有抓包路径。使用时应假定敏感 Header 与 Body 可能被完整保存在内存中。
  • 不要在生产账号、支付、身份认证等敏感流程上长时间开启抓包。完成调试后停止抓包并移除对本地 CA 的信任。

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages