关于 ProxyBridge 配置文件编辑器
ProxyBridge 配置编辑器把 .pbprofile 文件——也就是保存 ProxyBridge 代理配置和路由规则的那份 JSON——拆成结构化表单,编辑后再写回一份经过校验的文件。它能读出这个格式实际存在的两种字段风格,保证规则始终指向真实存在的代理条目,并在本地生成下载文件。
.pbprofile 是一个 JSON 对象,其中真正关键的是两个数组:代理配置和路由规则。一条规则包含进程匹配、目标主机匹配、目标端口匹配、协议和动作,规则从数组顶部往下读取,第一条命中且启用的规则决定这条连接的去向。手工改这个文件最别扭的地方在于两个数组之间的关联:在 macOS 样例使用的字段风格里,走代理的规则根本不会写 PROXY 这个词——action 字段里放的是代理自身的 id,一旦写错,文件依然是合法 JSON,却什么都转发不了。这个编辑器把动作拆成一个选项加一个代理选择框,并且拒绝导出代理不在列表中的规则。
如何使用这个开发者工具
- 上传你正在用的 .pbprofile;也可以从空白配置开始,它自带一条 DIRECT 的兜底规则。
- 先选导出字段风格:「macOS 样例」是桌面应用导出的小驼峰结构,「跨平台 / CLI」是带版本字段的大驼峰结构。
- 填写配置名称、输出文件名和应用级开关。哪些开关会被写进文件取决于风格,所以请先定风格再花时间调它们。
- 逐个添加代理配置:名称、SOCKS5 或 HTTP、主机和端口;只有上游确实需要时才填用户名和密码。
- 添加规则并用箭头排序:进程名或 Bundle ID、目标主机、目标端口、协议,最后是动作——PROXY 并指定代理、DIRECT 或 BLOCK。
- 点击校验并下载 .pbprofile。如果某条 PROXY 规则背后没有有效代理,或者主机为空、端口不在 1-65535 之间,导出会被中止。
实例:让局域网流量不走代理
输入是桌面应用以 macOS 样例风格导出的配置,精简到一个代理和一条规则。它的兜底规则把一切都送进代理,包括回环和局域网目标。输出是在它上面加了一条 DIRECT 规则之后,编辑器下载出的文件。
{
"name": "Work",
"runAtStartup": false,
"closeToMenuBar": true,
"trafficLoggingEnabled": true,
"proxyConfigs": [
{
"id": "6F2B0C7E-9A43-4E51-9B0D-1C5A7E8D2F10",
"name": "HK SOCKS5",
"type": "socks5",
"host": "proxy.example.com",
"port": 1080,
"username": "alice",
"password": "s3cret"
}
],
"proxyRules": [
{
"localId": "B1D9E6C4-77A8-4B30-A2F5-5E8C1D9046AB",
"name": "Default",
"enabled": true,
"processNames": "*",
"targetHosts": "*",
"targetPorts": "*",
"protocol": "BOTH",
"action": "6F2B0C7E-9A43-4E51-9B0D-1C5A7E8D2F10"
}
]
}{
"closeToMenuBar": true,
"name": "Work",
"proxyConfigs": [
{
"host": "proxy.example.com",
"id": "6F2B0C7E-9A43-4E51-9B0D-1C5A7E8D2F10",
"name": "HK SOCKS5",
"port": 1080,
"type": "socks5",
"username": "alice",
"password": "s3cret"
}
],
"proxyRules": [
{
"action": "DIRECT",
"enabled": true,
"localId": "0B7C4A11-3E5D-4F2A-8C61-9D0E2B4F7A33",
"name": "LAN direct",
"processNames": "*",
"protocol": "BOTH",
"targetHosts": "127.0.0.1; 192.168.*.*; *.local",
"targetPorts": "*"
},
{
"action": "6F2B0C7E-9A43-4E51-9B0D-1C5A7E8D2F10",
"enabled": true,
"localId": "B1D9E6C4-77A8-4B30-A2F5-5E8C1D9046AB",
"name": "Default",
"processNames": "*",
"protocol": "BOTH",
"targetHosts": "*",
"targetPorts": "*"
}
],
"runAtStartup": false,
"trafficLoggingEnabled": true
}重点看两条规则的 action 字段。新规则写的是 DIRECT,而原来那条规则的 action 是代理的 id,而不是 PROXY 这个词——这正是该字段风格记录代理规则的方式,编辑器会把它显示成动作 PROXY 并选中对应代理。键的顺序变了,是因为文件是重新生成而不是就地打补丁;除了新增的那条规则,没有任何值被改动。
macOS 样例风格与跨平台 / CLI 风格对照
同一份配置在两种导出风格下使用不同的键名。两种都能上传:风格的判定依据是文档是否使用小驼峰的 proxyConfigs 和 proxyRules 这两个键。
| 含义 | macOS 样例风格 | 跨平台 / CLI 风格 |
|---|---|---|
| 代理数组 | "proxyConfigs" | "ProxyConfigs" |
| 代理标识 | "id",UUID 字符串 | "Id",数字 |
| 代理类型 | "type":"socks5" 或 "http" | "Type":取值相同 |
| 端口 | "port": 1080,数字 | "Port": "1080",字符串 |
| 凭据 | "username" / "password",任一有值时才写入 | "Username" / "Password",始终写入,未用时为空串 |
| 规则数组 | "proxyRules" | "ProxyRules" |
| 进程匹配 | "processNames" | "ProcessName" |
| 主机与端口匹配 | "targetHosts" / "targetPorts" | "TargetHosts" / "TargetPorts" |
| 协议 | "protocol":TCP、UDP 或 BOTH | "Protocol":取值相同 |
| 启用标志 | "enabled" | "IsEnabled" |
| DIRECT 与 BLOCK | "action": "DIRECT" 或 "BLOCK" | "Action": "DIRECT" 或 "BLOCK" |
| PROXY 动作 | "action" 里放的是代理 id,而不是关键字 | "Action": "PROXY",另有独立的 "ProxyConfigId" |
| 配置级设置 | name、closeToMenuBar、runAtStartup、trafficLoggingEnabled | Version、LocalhostViaProxy、IsTrafficLoggingEnabled |
| 规则名称 | "name",会保留 | 完全不写入;重新导入时名称会变成 Rule 1、Rule 2 |
常见问题排查
明明配好了代理,动作为 PROXY 的规则却过不了校验。
成因 该规则引用的代理 id 不在代理列表中。上传的文件会原样保留这种悬空引用,因为 action 字段里的 id 是被直接采信的。
解决办法 打开这条规则,从下拉框重新选一个代理,或者把动作改成 DIRECT。删除代理之后也要复查规则:用到它的规则会被自动改成 DIRECT,那部分流量就悄悄不走代理了。
针对某个应用写的规则完全不起作用,所有流量走向一致。
成因 上面有一条先命中的规则。进程、主机、端口全为 * 的规则会匹配所有连接,它下面的内容永远轮不到。
解决办法 用箭头把具体规则移到通用规则之上,并且只保留一条兜底规则放在最后。还要记住:在 macOS 上 UDP 规则主要依据进程和 Bundle ID 字段匹配,只按主机名写的 UDP 规则未必和旁边那条 TCP 规则表现一致。
切换到跨平台 / CLI 风格后,规则里的 ProxyConfigId 和任何一条 ProxyConfigs 的 Id 都对不上。
成因 该风格用数字给代理编号,而在本编辑器里新建的代理带的是 UUID 标识。UUID 无法解析成数字时,代理条目会按位置编成 1、2、3,而规则仍然保留原来的标识。
解决办法 做跨平台配置时,尽量从应用以该风格导出的文件开始编辑,这样 id 本来就是数字。如果是从零开始建的,就打开下载后的 JSON,把每条 ProxyConfigId 改成它应当使用的那个代理的数字 Id。
导入时应用根本不显示刚下载的文件。
成因 文件落盘时扩展名变了。浏览器有时会给下载文件补上 .json 或 .txt,而不带扩展名的文件名也不符合导入对话框的筛选条件。
解决办法 输出文件名缺少扩展名时编辑器会自动补 .pbprofile,所以要检查磁盘上的实际文件而不是输入框。把它改回单一的 .pbprofile 后缀,并关掉浏览器中会改写下载文件名的相关设置。
配置生效后,本机服务访问不通了。
成因 兜底的 PROXY 规则同样匹配 127.0.0.1、局域网网段和内网主机名,本地开发服务器也被拨到了上游。
解决办法 在兜底规则之上放一条 DIRECT 规则,覆盖 127.0.0.1、::1、你的局域网前缀和内网后缀。注意「本机流量走代理」这个开关只在跨平台 / CLI 风格里写入,macOS 样例输出不包含它,所以在该风格下真正起作用的就是这条 DIRECT 规则。
适合用这个工具的场景
- 按 Bundle ID 或进程名写一张分应用路由表,不必手工编辑 JSON、数括号。
- 把一份配置改成指向另一个代理主机和另一套凭据,再交给同事。
- 在保留全部规则的前提下,把配置在 macOS 样例风格和跨平台 / CLI 风格之间来回转换。
- 在没有安装该应用的机器上,审阅一份配置对哪些进程走代理、哪些直连、哪些拦截。
应该换用别的工具的场景
- 整理从多个来源收集来的代理地址列表。先用代理格式化工具把地址规整好,再把结果填进这里的代理表单。
- 确认某个代理是否响应、凭据是否可用。那是批量代理检测工具的职责,并且只应对你有权测试的列表使用;本编辑器完全不发起网络连接。
- 让规则作用于真实流量。下载的只是配置文件,真正做转发的是装好的 ProxyBridge 应用。
隐私与数据处理
文件由浏览器的 JSON 解析器读取,在内存中编辑,在当前标签页重新序列化,最后作为本地下载交给你。没有任何内容发送到本站,服务端也不保留副本。本地留下的痕迹有两处需要了解:「保存到浏览器历史」会在当前浏览器的 localStorage 中最多留下 12 份完整配置快照,其中包含你填写过的代理密码;下载的文件本身也把用户名和密码作为普通 JSON 字符串保存,所以它属于凭据文件——不要把它附在工单里,在不属于你的机器上用完请删除。
相关开发者工具
常见问题
不装应用也能编辑 .pbprofile 吗?
可以。这个文件就是普通 JSON,本页在浏览器内完成解析、编辑和重新序列化。做不到的是让配置生效,或验证里面的代理是否可用。
它能读哪几种字段风格?
两种都能读。使用小驼峰 proxyConfigs 和 proxyRules 键的文档按 macOS 样例风格读取,其余按大驼峰键的跨平台 / CLI 风格读取。导出时两种风格都可选,但有几个配置级设置和规则名称只存在于其中一种。
我的代理密码会被上传吗?
不会。所有处理都在当前标签页完成,文件是本地下载的。但密码在下载的 JSON 里是明文,「保存到浏览器历史」也会在你自己设备的 localStorage 中保留完整副本,这两者都要当作机密对待。
为什么应用不认或忽略我的文件?
最常见的两个原因是下载过程中扩展名被改写,以及风格不匹配——大驼峰键的文件送给期待小驼峰结构的应用,或者反过来。先用应用自己导出一份配置,把顶层键名和你的文件逐一对照。
能把 Proxifier 的配置转成 .pbprofile 吗?
没法自动转换。代理定义以及 Direct、Proxy、Block 规则可以手工对应到 DIRECT、PROXY、BLOCK,但 Proxifier 的代理链在这里没有对应概念,ProxyBridge 按规则选择协议的能力在那边也没有对应项。建议把 Proxifier 配置编辑器和本页并排打开,逐项誊写。
协议这个设置有什么用?
它把规则限定为 TCP、UDP 或两者皆可。当某个进程的 TCP 流量需要走代理、UDP 需要直连时,把规则拆成两条就很有用;在 macOS 上,UDP 的匹配更依赖进程和 Bundle ID 字段,而不是目标主机。
本站和 ProxyBridge 有关联吗?
没有。这里只是一个独立的 .pbprofile 文件格式编辑器。ProxyBridge 属于其开发者,该名称及相关商标归各自权利人所有。