pxc抓包代理与团队协作
对标 Proxyman 的抓包代理,并把调试现场变成团队共享资产。Go 内核 pxc-core 与多端壳之间唯一契约是 /v1 HTTP/WS API:macOS Swift、Windows WinUI、Flutter 三端共用同一内核。
01$ pxc sessions --host api.github.com --status 500 --limit 2002[ { "id": 42, "method": "POST", "path": "/v1/pay", "status": 500 } ]0304$ pxc bp respond 7 --status 201 --body '{"ok":true}'05{ "released": true, "mode": "mock" }抓包不是终点,可复现的调试现场才是。
设计要点
这个工具为什么这么做,以及这样做换来了什么。
内核只暴露 /v1 API,任何端(Swift / WinUI / Flutter / CLI)都是平等消费者,跨平台行为天然一致。
pxc status / sessions / body / curl 全部结构化输出,AI 可直接读流量定位问题,不需要截图。
一行规则把目标流量挂住,实时查看 body 并决定放行、mock 或中止,改包重放不用写脚本。
抓包现场可导出 HAR 与 cURL,附在 issue 里即可复现,不再靠「你那边再试一次」。
能力一览
- Go 内核 + 多端壳,UI 层可替换,/v1 HTTP/WS 是唯一契约
- pxc CLI 为 Agent 而生:JSON 默认输出、退出码语义化、token 自动解析
- 服务端过滤与全文检索:按 host、状态码、body 关键词直接定位
- 断点调试:挂起流量后可改 method / url / header / body 再放行
- 故障注入与 mock:不连上游直接应答,构造异常分支
- HAR 1.2 全量导出与 cURL 重放,调试现场一键分享给同事
设计指标
每一条都对应实现里的一个具体决定。
macOS Swift / Windows WinUI / Flutter,UI 可替换
内核 E2E 验收覆盖,跨端行为一致的前提
规则文件保存后 1 秒内生效,不用重启内核
成功 / 失败 / 用法错误,便于脚本与 Agent 判断
全文检索,按 body 关键词直接定位,不靠肉眼翻
全量导出 + cURL 重放,调试现场可分享
平台支持
内核与界面分离之后,每个平台的支持程度可以单独推进。
Swift 桌面壳,与内核经 /v1 HTTP/WS 通信
WinUI 桌面壳,共用同一 Go 内核
JSON 默认输出、退出码语义化、token 自动解析
移动端抓包与查看,绑定层已在 kernel/bindings
内核自带 Web 界面产物,浏览器内查看流量
与常见做法的差别
差别通常不在功能表上,而在「边界画在哪里」。
命令速览
完整手册见 CLI 手册页。全部命令默认输出结构化结果。
pxc status查看内核运行状态、监听端口与授权信息
--jsonpxc sessions检索已捕获的流量,支持多条件组合
--host--status--method--limit--qpxc body <id>读取指定请求的完整请求体与响应体
--req--res--rawpxc curl <id>导出为可重放的 cURL 命令
--no-headers实际输出
01$ pxc sessions --host api.github.com --status 500 --limit 2002[ { "id": 42, "method": "POST", "path": "/v1/pay", "status": 500 } ]0304$ pxc bp respond 7 --status 201 --body '{"ok":true}'05{ "released": true, "mode": "mock" }代码模块
3 组、15 个模块,全部来自仓库真实目录结构。
Go · Swift · WinUI · Flutter · WebSocket · HAR · FTSGo 写的 pxc-core,是唯一的事实来源。
internal/engine流量捕获与代理引擎,断点挂起与放行的执行主体
kernel/internal/engineinternal/store流量落库与检索,FTS 全文检索支撑按 body 关键词定位
kernel/internal/storeinternal/rules规则引擎:文本 DSL 规则,保存后 1s 热加载
kernel/internal/rulesinternal/api/v1 HTTP + WebSocket 契约实现,内核对外的唯一接口
kernel/internal/apiinternal/scripting脚本化扩展能力
kernel/internal/scriptinginternal/pairing / discovery设备配对与实例发现,支撑多端协同调试
kernel/internal/{pairing,discovery}internal/license / instance授权与实例管理
kernel/internal/{license,instance}内核只认 /v1,所有端都是平等消费者。
cmd/pxcCLI:JSON 默认输出、退出码语义化(0/1/2)、token 自动解析
kernel/cmd/pxccmd/pxc-core内核服务进程
kernel/cmd/pxc-corecmd/pxc-mobile / pxc-license移动端与授权命令
kernel/cmd/apps/desktop桌面端壳(macOS Swift / Windows WinUI)
apps/desktopapps/mobile / webuiFlutter 移动端与 Web UI
apps/{mobile,webui}跨平台一致性的保障。
shared/api-spec/v1 API 规格,内核与所有端据此对齐
shared/api-speckernel/bindings移动端绑定层
kernel/bindingskernel/web内核自带的 Web 界面产物
kernel/web使用场景
4 个典型场景,每个都拆成可照做的步骤。
不用在客户端加日志,直接看真实请求与响应。
- 1pxc sessions --host api.example.com --status 500 筛选
- 2pxc body <id> 读出响应体里的错误栈
- 3必要时 pxc curl <id> 在本地重放复现
- 4pxc export 导出 HAR 附到 issue
把目标流量挂住,改完再放行,不用写脚本。
- 1在规则文件里写一行匹配规则
- 2规则保存后 1s 内热加载生效
- 3目标请求被挂起,实时查看 method / url / header / body
- 4改包后放行,或直接 mock 应答
不连上游就能返回你要的状态码与 body。
- 1pxc bp respond <id> --status 503 --body 指定响应
- 2客户端收到构造出的异常
- 3验证前端的降级与容错逻辑
- 4无需改动服务端或上游
AI 直接读结构化流量,不需要人截图描述。
- 1Agent 调用 pxc status 确认内核可用
- 2按 host 与状态码筛选出可疑会话
- 3读取 body 拿到真实错误信息
- 4结构化输出直接进入分析链路
数据边界与安全
这类工具的价值很大一部分在于「它不做什么」。下面每一条都标注了实现位置。
抓包内核跑在本机,流量数据不经过第三方服务。
cmd/pxc-core设备配对与实例发现机制,非配对实例无法接入。
internal/pairing · discoveryCLI 自动发现并解析本地 token,无需在命令行明文传递凭据。
cmd/pxc规则是本地文本 DSL,文件位置与内容可审计,1s 热加载。
~/.pxc/project/rules.txt授权与实例绑定,便于团队统一管理与回收。
internal/license · instanceHAR 与 cURL 导出由用户主动触发,不会自动外传。
导出模块版本节奏
已发布的写清交付了什么,开发中的写清正在做什么。
v0.3已发布内核- Go 抓包与代理引擎
- /v1 HTTP + WebSocket 契约
- FTS 全文检索
- 规则引擎与热加载
v0.6已发布调试与多端- 断点挂起与改包放行
- 故障注入与 mock 应答
- macOS Swift 桌面壳
- HAR 1.2 导出与 cURL 重放
v0.8开发中协作与 Agent- pxc CLI 结构化输出完善
- Windows WinUI 桌面壳
- Flutter 移动端抓包
- 团队共享会话与权限
v1.0规划中生态- 脚本化扩展开放
- 协议扩展(gRPC / WebSocket 增强)
- CI 集成与自动化断言
- 团队工作区与审计
常见问题
因为抓包能力要跨平台。内核只暴露 /v1 HTTP/WS,macOS Swift、Windows WinUI、Flutter、CLI 都是平等消费者——跨平台一致性由契约保证,而不是靠每个端各写一遍抓包逻辑。
代码模块
3 组、15 个模块。路径直接对应仓库目录,方便工程同学定位。
Go 写的 pxc-core,是唯一的事实来源。
internal/engine流量捕获与代理引擎,断点挂起与放行的执行主体
kernel/internal/engineinternal/store流量落库与检索,FTS 全文检索支撑按 body 关键词定位
kernel/internal/storeinternal/rules规则引擎:文本 DSL 规则,保存后 1s 热加载
kernel/internal/rulesinternal/api/v1 HTTP + WebSocket 契约实现,内核对外的唯一接口
kernel/internal/apiinternal/scripting脚本化扩展能力
kernel/internal/scriptinginternal/pairing / discovery设备配对与实例发现,支撑多端协同调试
kernel/internal/{pairing,discovery}internal/license / instance授权与实例管理
kernel/internal/{license,instance}内核只认 /v1,所有端都是平等消费者。
cmd/pxcCLI:JSON 默认输出、退出码语义化(0/1/2)、token 自动解析
kernel/cmd/pxccmd/pxc-core内核服务进程
kernel/cmd/pxc-corecmd/pxc-mobile / pxc-license移动端与授权命令
kernel/cmd/apps/desktop桌面端壳(macOS Swift / Windows WinUI)
apps/desktopapps/mobile / webuiFlutter 移动端与 Web UI
apps/{mobile,webui}跨平台一致性的保障。
shared/api-spec/v1 API 规格,内核与所有端据此对齐
shared/api-speckernel/bindings移动端绑定层
kernel/bindingskernel/web内核自带的 Web 界面产物
kernel/web技术栈
分层设计
从内核到界面,每一层负责什么、用什么实现。这类工具的核心设计是「内核与界面分离」。
Go pxc-core:流量捕获、FTS 检索、断点与规则引擎
/v1 HTTP + WebSocket,内核与所有端唯一接口
macOS Swift / Windows WinUI / Flutter
cmd/pxc,JSON 输出、退出码 0/1/2、token 自动发现
~/.pxc/project/rules.txt 文本 DSL,保存 1s 热加载
HAR 1.2 全量导出、cURL 重放命令
多端支持
同一个内核,不同平台只是换一层壳。支持程度可以按平台单独推进。
Swift 桌面壳,与内核经 /v1 HTTP/WS 通信
WinUI 桌面壳,共用同一 Go 内核
JSON 默认输出、退出码语义化、token 自动解析
移动端抓包与查看,绑定层已在 kernel/bindings
内核自带 Web 界面产物,浏览器内查看流量
技术栈
命令手册
8 条命令。设计前提:输出结构化、退出码语义化,让脚本和 AI Agent 都能可靠消费。
pxc status查看内核运行状态、监听端口与授权信息
--jsonpxc sessions检索已捕获的流量,支持多条件组合
--host--status--method--limit--qpxc body <id>读取指定请求的完整请求体与响应体
--req--res--rawpxc curl <id>导出为可重放的 cURL 命令
--no-headerspxc export按筛选条件导出 HAR 1.2 全量记录
--out--host--sincepxc bp respond <id>对挂起的请求直接应答(mock 模式)
--status--body--headerpxc rules reload热加载规则文件,无需重启内核
--filepxc discovery发现局域网内可配对的实例与设备
--json输出约定
CLI 是给程序用的接口,人只是顺便看得懂。
默认输出 JSON,字段名稳定。人可读的格式化由调用方决定,不由 CLI 猜测。
成功、失败、用法错误分别返回不同退出码,脚本与 Agent 据此分支,不用解析文本。
自动发现本地令牌文件,避免在命令行明文传凭据(会被写入 shell 历史与进程列表)。
一次实际调用
01$ pxc sessions --host api.github.com --status 500 --limit 2002[ { "id": 42, "method": "POST", "path": "/v1/pay", "status": 500 } ]0304$ pxc bp respond 7 --status 201 --body '{"ok":true}'05{ "released": true, "mode": "mock" }把身份、Agent 与私域的复杂度,交给一套可治理的内核
无论你是要替换现有的 IAM、搭建 Agent 中台,还是想把企微私域真正运营起来——先从一次 30 分钟的架构沟通开始。我们会先判断问题是不是我们擅长解的那类,不合适会直接说。