Proxifier Profile 编辑器

用结构化表单编辑 Proxifier v2/v3 的 .ppx 配置

正在加载工具…

关于 Proxifier 配置文件编辑器

Proxifier 配置编辑器把 .ppx 配置文件拆成结构化表单——代理、代理链、选项和规则——编辑之后再写回一份新的 .ppx。它同时能读 v2 和 v3 两种布局,保留标识目标 Proxifier 版本的根属性,并在生成下载文件之前校验每一条规则的引用。

.ppx 本质上是一份很小的 XML 文档,由四部分组成:Options 选项块、ProxyList 代理列表、ChainList 代理链列表和 RuleList 规则列表。几乎所有路由决策都落在最后一部分,因为规则是从列表顶部往下逐条匹配的,第一条命中且启用的规则就决定了这条连接的去向。在应用里调整顺序意味着在弹窗里一行行拖动;直接改文本又必须手工维护代理和链的数字 id,只要有一个 id 失效,一条本该走代理的规则就会变成导入报错。这个编辑器介于两者之间:字段和文件里的完全一致,同时多了一道校验——只要规则指向配置中已经不存在的 id,就不允许导出。

如何使用这个开发者工具

  1. 上传你正在用的 .ppx;如果是从零开始,就直接新建一份空白配置。
  2. 先确定格式区的内容。v3 / v2 开关决定系统服务相关选项是否写入文件,而平台、产品 ID 和最低版本这几个字段,正是 Proxifier 在接受文件之前会读取的根属性。
  3. 逐个添加代理,填写类型、地址和端口;上游需要认证时再补上用户名和密码。每个代理都有一个数字 id,规则和代理链引用的就是这个 id。
  4. 只有在流量确实需要多跳转发时才建代理链:先勾选要使用的代理,再用链路顺序旁边的箭头调整实际转发次序。
  5. 添加规则,并用箭头把具体规则移到宽泛规则之上,列表最后只保留一条兜底规则。
  6. 点击校验并下载 .ppx。如果某条规则指向的代理或代理链不在配置中,导出会被拦下——这时候被拒绝是真发现了问题,而不是工具出错。

实例:一份把所有流量都送进代理的 v2 配置

下面是从 Proxifier v2 导出的配置,精简到只剩一个代理和一条规则。它唯一的规则把所有连接都交给 100 号代理,连回环和局域网流量也一并送上了上游。输出是在编辑器里切到 v3、把最低版本改成 300、并把一条 Direct 规则挪到兜底规则之前后写出的文件。

上传的配置(v2)
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ProxifierProfile version="101" platform="Windows" product_id="2" product_minver="200">
    <Options>
        <Resolve>
            <AutoModeDetection enabled="false"/>
            <ViaProxy enabled="true">
                <TryLocalDnsFirst enabled="false"/>
            </ViaProxy>
            <ExclusionList ExcludeSimpleHostnames="true" ExcludeLocalhost="true" ExcludeSelfHostname="true" ExcludeLocalDomain="true"></ExclusionList>
        </Resolve>
        <Encryption mode="disabled"/>
        <HttpProxiesSupport enabled="true"/>
        <HandleDirectConnections enabled="false"/>
        <ConnectionLoopDetection enabled="true"/>
        <BlockUDP443 enabled="false"/>
    </Options>
    <ProxyList>
        <Proxy id="100" type="SOCKS5">
            <Address>proxy.example.com</Address>
            <Port>1080</Port>
            <Options>48</Options>
            <Authentication enabled="true">
                <Username>alice</Username>
                <Password>s3cret</Password>
            </Authentication>
        </Proxy>
    </ProxyList>
    <ChainList/>
    <RuleList>
        <Rule enabled="true">
            <Name>Default</Name>
            <Action type="Proxy">100</Action>
        </Rule>
    </RuleList>
</ProxifierProfile>
下载的配置(v3)
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ProxifierProfile version="101" platform="Windows" product_id="2" product_minver="300">
    <Options>
        <Resolve>
            <AutoModeDetection enabled="false"/>
            <ViaProxy enabled="true">
                <TryLocalDnsFirst enabled="false"/>
            </ViaProxy>
            <ExclusionList ExcludeSimpleHostnames="true" ExcludeLocalhost="true" ExcludeSelfHostname="true" ExcludeLocalDomain="true">*.corp.example.com
            </ExclusionList>
        </Resolve>
        <Encryption mode="disabled"/>
        <HttpProxiesSupport enabled="true"/>
        <HandleDirectConnections enabled="false"/>
        <ConnectionLoopDetection enabled="true"/>
        <ProcessServices enabled="true"/>
        <ProcessOtherUsers enabled="true"/>
        <BlockUDP443 enabled="false"/>
    </Options>
    <ProxyList>
        <Proxy id="100" type="SOCKS5">
            <Address>proxy.example.com</Address>
            <Port>1080</Port>
            <Options>48</Options>
            <Authentication enabled="true">
                <Username>alice</Username>
                <Password>s3cret</Password>
            </Authentication>
        </Proxy>
    </ProxyList>
    <ChainList>
    </ChainList>
    <RuleList>
        <Rule enabled="true">
            <Name>Local</Name>
            <Targets>localhost; 127.0.0.1; 192.168.*.*; *.local</Targets>
            <Action type="Direct"></Action>
        </Rule>
        <Rule enabled="true">
            <Name>Default</Name>
            <Action type="Proxy">100</Action>
        </Rule>
    </RuleList>
</ProxifierProfile>

有三处差异值得细看。切到 v3 之后多出了 ProcessServices 和 ProcessOtherUsers,这两个元素在 v2 文件里根本不存在。最低版本是一个独立字段,是手动改成 300 的——选择 v3 并不会替你改动它。新增的 Local 规则被放在兜底规则之上,否则兜底规则会先匹配回环和局域网地址。另外,密码在下载文件里仍然是明文。

规则动作、匹配字段与版本差异

下表列出的都是这个编辑器实际读写的内容。左列是表单里的控件,中间列是它在文件中生成的标记。

字段或动作编辑器写出的内容对匹配流量意味着什么
Direct 直连<Action type="Direct"></Action>命中的连接绕开配置中所有代理,按系统默认路径出网。
Proxy 指定代理<Action type="Proxy">100</Action>命中的连接走元素内写明的那个数字 id 对应的单个代理。
Chain 代理链<Action type="Chain">200</Action>命中的连接按代理链列出的顺序,依次穿过链中的每一个代理。
Block 拦截<Action type="Block"></Action>命中的连接被拒绝,针对该目标不会有任何数据离开本机。
应用匹配<Applications>"Chrome"; com.google.Chrome</Applications>进程名、Bundle ID 或通配符,用分号分隔。留空时该元素不写入文件,等同于匹配任意应用。
目标匹配<Targets>*.example.com; 192.168.*.*</Targets>主机名、IP 或通配符。端口写在条目内部,例如 example.com:443。留空时不写入,等同于匹配任意目标。
规则顺序在 <RuleList> 中的位置规则自上而下读取,第一条命中且启用的规则生效,它下面的规则不再参与判断。
停用的规则<Rule enabled="false">仍然保留在文件和编辑器里,但匹配时会被跳过。
仅 v3 的选项<ProcessServices enabled="true"/>只有选中 v3 时才会写出,ProcessOtherUsers 同理;v2 输出完全不含这两个元素。
上传时的版本判定product_minver="300"上传的文件带有这个属性值,或含有任一 v3 专属选项元素时按 v3 读取,否则按 v2 读取。
根属性version="101" platform="Windows" product_id="2"从上传文件中原样带入并可编辑。平台或版本留空时会直接拒绝导出。

常见问题排查

下载被拒绝,编辑器提示输入无效,但每个字段看上去都填好了。

成因 仍有规则指向配置中不存在的代理或代理链 id。手工改过的文件上传后这种悬空引用会被保留下来,而校验环节存在的意义正是拦住它。

解决办法 打开每一条 Proxy 或 Chain 规则,从下拉框里重新选择目标。另外要注意:在编辑器里删除代理或代理链时,引用它的规则会被静默改成 Direct,所以删除之后请回头确认那些你以为还在走代理的规则。

新加的具体规则始终不生效。

成因 上面压着一条更宽泛的规则。应用匹配和目标匹配都为空的规则会匹配一切,排在兜底规则之下的内容全是无效配置。

解决办法 用箭头把具体规则移到宽泛规则之上。把整个列表理解成「首个命中即生效」的链条,并且只保留一条兜底规则、放在最后。

Proxifier 拒绝导入这个文件,或者导入后少了一些选项。

成因 版本开关和根属性对不上。选择 v3 只会写出 v3 专属的选项元素,product_minver 仍然维持文件原来的取值;而带着 platform="MacOSX" 的配置也不是 Windows 端所期望的。

解决办法 先用目标版本的 Proxifier 导出一份新配置,对照它的四个根属性,把版本、平台、产品 ID 和最低版本改成一致,再重新下载。

回环或局域网流量被送进了上游代理。

成因 兜底规则对 127.0.0.1 和 192.168.x.x 一视同仁地匹配。内置排除开关影响的是名称解析方式,而不是规则做出的路由决定。

解决办法 在兜底规则之上加一条 Direct 规则,目标列表覆盖 localhost、127.0.0.1、你的局域网网段,以及 *.local、*.corp.example.com 这类内网后缀。

配置里带着可用的凭据,却要分享出去或保存在共用设备上。

成因 用户名和密码以明文写在 Authentication 元素中,而「保存到浏览器历史」会在当前浏览器的 localStorage 里最多留下 12 份完整快照。

解决办法 分享前先清空用户名和密码,或直接关闭认证开关,让对方自己填写。在不属于你的机器上不要使用保存到浏览器历史,用完把下载的文件删掉。

适合用这个工具的场景

  • 重排很长的规则列表,让具体规则排到兜底规则之上,而且整张列表一眼看得全。
  • 把同事导出的配置改写成指向你自己的代理地址和凭据,然后再导入。
  • 在保留代理、代理链和规则的前提下,把 v3 配置产出成 v2 可用的文件,或者反过来。
  • 在没有安装 Proxifier 的机器上,看清一份配置究竟为哪些应用和目标做了转发。

应该换用别的工具的场景

  • 把杂乱的代理地址列表规整成统一格式。那是代理格式化工具的活,整理好的结果再填进这里的代理表单。
  • 确认这些代理是否真的可用。批量代理检测工具会对你有权测试的列表做连通性和认证测试;本编辑器不会发起任何连接。
  • 转发流量本身。这里下载的只是配置文件,真正拦截连接的是装在机器上的 Proxifier 应用。

隐私与数据处理

上传的文件由浏览器自带的 XML 解析器读取,在内存里以对象形式编辑,再在当前标签页序列化回文本,下载来自本地的 blob 链接。没有任何内容发送到本站,因此也不存在需要我们删除的服务端副本。但有两点仍需注意。「保存到浏览器历史」会把整份配置的快照——包括你填写的密码——写进当前浏览器的 localStorage,最多保留 12 条,所以不要在共享或受管控的设备上使用它。另外,下载得到的 .ppx 会把凭据以明文写在 Authentication 元素里:密码加密下拉框只是给 Encryption 元素写上一个 mode 属性,在这里并不会真的加密任何内容。请把下载下来的文件当作机密文件对待。

相关开发者工具

常见问题

不装 Proxifier 也能编辑配置文件吗?

可以。.ppx 就是纯 XML,本页的解析、编辑和重新序列化全部在浏览器内完成。没有应用本体时做不到的,是让配置真正生效,以及测试其中的代理是否可用。

v2 和 v3 的配置都支持吗?

都支持。上传的文件带 product_minver="300" 或含有任一 v3 专属选项元素时按 v3 读取,否则按 v2 读取。之后也可以随时切换开关:v3 输出会补上系统服务和其他用户两个选项,v2 输出则不写入,两种情况下代理、代理链和规则都保持不变。

我的代理密码会被上传吗?

不会。解析、编辑和序列化都在当前标签页内完成,文件通过本地 blob 下载。但密码会以明文写进下载的配置文件,「保存到浏览器历史」也会在你自己设备的 localStorage 里留一份副本。

为什么 Proxifier 不认我下载的文件?

先看扩展名:导入对话框按 .ppx 过滤,部分浏览器在保存时会补上 .txt 或 .xml。其次把四个根属性和你本机导出的配置逐一对照,平台或最低版本不匹配是第二常见的原因。

能把 Proxifier 配置转成 ProxyBridge 的吗?

没法自动转,两者的模型也对不齐。代理定义以及 Direct、Proxy、Block 三类规则可以手工搬进本站的 ProxyBridge 配置编辑器,但代理链在那边没有对应概念,Proxifier 特有的选项也带不过去。

代理条目里的 Options 值是什么?

那是 Proxifier 自己维护的数字标志位,编辑器把它当作自由文本保留,因此上传的值可以原样往返。在这里新增的代理默认是 0;除非你是刻意从应用导出的配置里抄一个值过来,否则不要改动它。

本站和 Proxifier 有关联吗?

没有。这里只是一个独立的 .ppx 文件格式编辑器。Proxifier 是其厂商的产品,该名称及相关商标归各自权利人所有。