Capture Proxy + Team Collaboration

pxc抓包代理与团队协作

对标 Proxyman 的抓包代理,并把调试现场变成团队共享资产。Go 内核 pxc-core 与多端壳之间唯一契约是 /v1 HTTP/WS API:macOS Swift、Windows WinUI、Flutter 三端共用同一内核。

pxc
01$ pxc sessions --host api.github.com --status 500 --limit 20
02[ { "id": 42, "method": "POST", "path": "/v1/pay", "status": 500 } ]
03
04$ pxc bp respond 7 --status 201 --body '{"ok":true}'
05{ "released": true, "mode": "mock" }
$

抓包不是终点,可复现的调试现场才是。

Design

设计要点

这个工具为什么这么做,以及这样做换来了什么。

内核与 UI 解耦

内核只暴露 /v1 API,任何端(Swift / WinUI / Flutter / CLI)都是平等消费者,跨平台行为天然一致。

Agent 友好

pxc status / sessions / body / curl 全部结构化输出,AI 可直接读流量定位问题,不需要截图。

断点即调试器

一行规则把目标流量挂住,实时查看 body 并决定放行、mock 或中止,改包重放不用写脚本。

团队共享

抓包现场可导出 HAR 与 cURL,附在 issue 里即可复现,不再靠「你那边再试一次」。

Highlights

能力一览

  • Go 内核 + 多端壳,UI 层可替换,/v1 HTTP/WS 是唯一契约
  • pxc CLI 为 Agent 而生:JSON 默认输出、退出码语义化、token 自动解析
  • 服务端过滤与全文检索:按 host、状态码、body 关键词直接定位
  • 断点调试:挂起流量后可改 method / url / header / body 再放行
  • 故障注入与 mock:不连上游直接应答,构造异常分支
  • HAR 1.2 全量导出与 cURL 重放,调试现场一键分享给同事
Metrics

设计指标

每一条都对应实现里的一个具体决定。

共用内核的端
3 端

macOS Swift / Windows WinUI / Flutter,UI 可替换

内核验收项
61

内核 E2E 验收覆盖,跨端行为一致的前提

规则热加载
1s

规则文件保存后 1 秒内生效,不用重启内核

退出码语义
0 / 1 / 2

成功 / 失败 / 用法错误,便于脚本与 Agent 判断

检索方式
FTS

全文检索,按 body 关键词直接定位,不靠肉眼翻

导出格式
HAR 1.2

全量导出 + cURL 重放,调试现场可分享

Platforms

平台支持

内核与界面分离之后,每个平台的支持程度可以单独推进。

macOS
完整

Swift 桌面壳,与内核经 /v1 HTTP/WS 通信

Windows
完整

WinUI 桌面壳,共用同一 Go 内核

CLI
完整

JSON 默认输出、退出码语义化、token 自动解析

Flutter / 移动端
部分

移动端抓包与查看,绑定层已在 kernel/bindings

Web UI
部分

内核自带 Web 界面产物,浏览器内查看流量

Comparison

与常见做法的差别

差别通常不在功能表上,而在「边界画在哪里」。

内核与界面
Go 内核只暴露 /v1 HTTP/WS,所有端是平等消费者
抓包逻辑写在界面里,每端各实现一遍
给 AI 用
CLI 默认 JSON、退出码语义化,Agent 可直接读流量
只能人肉看界面,AI 拿不到结构化数据
调试方式
断点挂起 + 实时改包 + mock 应答,不写脚本
要改包就得写拦截脚本或改代码重新部署
检索能力
服务端 FTS 全文检索,按 body 关键词定位
列表里肉眼翻,流量一多就找不到
团队协作
HAR 全量导出 + cURL 重放,现场可复现可分享
「你那边再试一次,看看能不能复现」
Commands

命令速览

完整手册见 CLI 手册页。全部命令默认输出结构化结果。

完整命令表
pxc status

查看内核运行状态、监听端口与授权信息

--json
pxc sessions

检索已捕获的流量,支持多条件组合

--host--status--method--limit--q
pxc body <id>

读取指定请求的完整请求体与响应体

--req--res--raw
pxc curl <id>

导出为可重放的 cURL 命令

--no-headers
In Practice

实际输出

pxc
01$ pxc sessions --host api.github.com --status 500 --limit 20
02[ { "id": 42, "method": "POST", "path": "/v1/pay", "status": 500 } ]
03
04$ pxc bp respond 7 --status 201 --body '{"ok":true}'
05{ "released": true, "mode": "mock" }
Source

代码模块

3 组、15 个模块,全部来自仓库真实目录结构。

Go · Swift · WinUI · Flutter · WebSocket · HAR · FTS
内核

Go 写的 pxc-core,是唯一的事实来源。

internal/engine

流量捕获与代理引擎,断点挂起与放行的执行主体

kernel/internal/engine
internal/store

流量落库与检索,FTS 全文检索支撑按 body 关键词定位

kernel/internal/store
internal/rules

规则引擎:文本 DSL 规则,保存后 1s 热加载

kernel/internal/rules
internal/api

/v1 HTTP + WebSocket 契约实现,内核对外的唯一接口

kernel/internal/api
internal/scripting

脚本化扩展能力

kernel/internal/scripting
internal/pairing / discovery

设备配对与实例发现,支撑多端协同调试

kernel/internal/{pairing,discovery}
internal/license / instance

授权与实例管理

kernel/internal/{license,instance}
命令与端

内核只认 /v1,所有端都是平等消费者。

cmd/pxc

CLI:JSON 默认输出、退出码语义化(0/1/2)、token 自动解析

kernel/cmd/pxc
cmd/pxc-core

内核服务进程

kernel/cmd/pxc-core
cmd/pxc-mobile / pxc-license

移动端与授权命令

kernel/cmd/
apps/desktop

桌面端壳(macOS Swift / Windows WinUI)

apps/desktop
apps/mobile / webui

Flutter 移动端与 Web UI

apps/{mobile,webui}
契约与绑定

跨平台一致性的保障。

shared/api-spec

/v1 API 规格,内核与所有端据此对齐

shared/api-spec
kernel/bindings

移动端绑定层

kernel/bindings
kernel/web

内核自带的 Web 界面产物

kernel/web
其他工具
Get in touch

把身份、Agent 与私域的复杂度,交给一套可治理的内核

无论你是要替换现有的 IAM、搭建 Agent 中台,还是想把企微私域真正运营起来——先从一次 30 分钟的架构沟通开始。我们会先判断问题是不是我们擅长解的那类,不合适会直接说。