Shadowsocks-windows: 错误地匹配了PAC规则

Created on 25 Apr 2019  ·  20Comments  ·  Source: shadowsocks/shadowsocks-windows

Related issue: https://github.com/gfwlist/gfwlist/issues/1531

我们公司是www.aixcoder.com,我们的部分用户反映我们的服务延迟很大,经调查,发现是我们的API端口 https://api.aixcoder.com/ 匹配了用户电脑上的gfwlist里面的"api.ai"规则,从而走了代理。

Shadowsocks version / 影梭版本

4.1.6

Environment(Operating system, .NET Framework, etc) / 使用环境(操作系统,.NET Framework等)

Windows 10

Steps you have tried / 操作步骤

把本地的pac.txt改名为pac.js,加入以下命令并用node执行:

console.log(FindProxyForURL("https://api.aixcoder.com/getmodels", "api.aixcoder.com"))
// 输出 __PROXY__,去掉`rules`中的"||api.ai"后输出DIRECT;

What did you expect to see? / 期望的结果

无论是否去掉 api.ai 都应该对 https://api.aixcoder.com/getmodels 输出DIRECT

What did you see instead? / 实际结果

见上

Config and error log in detail (with all sensitive info masked) / 配置文件和日志文件(请隐去敏感信息)

bug

All 20 comments

你好,Shadowsocks for Windows 使用了第三方的PAC列表服务,该PAC列表不由Shadowsocks for Windows控制,也无法控制该列表。

此问题确认,我在 pac.txt 中增加了一个名为 ip138.co 的内容后,访问 ip138.com 也会经过代理。

2019-04-25 (1)

4.1.4正常,疑似 9ee988d9f194652302fcf47032d2490fd5281171 引入的问题

末尾加个斜杠试一下

目前的版本加个斜杠的确可以了。

不过 gfwlist 里面那么多都没斜杠,不可能一个个的去加吧……

This behavior is quite similar to ABP which is not GFWList intends to be.

所以有人在负责这个issue吗?

现在要么联系作者去除被墙ip要么告知用户让他们修改规则,或者开发小app去修改用户CFW列表

@williamxxy 这个问题应该出在规则模式匹配的代码上,应该由这个项目的维护者来修复

这个项目目前有人维护,但是维护人员可能忙于现实生活工作,无法及时处理。

PS:Shadowsocks for Windows 是开源软件,如果贵公司有能力,也可以帮忙改一下,然后提交一个PR,这样速度可能会更快。(我不会写程序)

估计是将GFWList转换为 PAC.TXT 时,里面进行判断的JS脚本有点问题。

可以给gfwlist提交这个问题,让他们加上斜杠

@felixhao28 其实匹配代码是直接把早些年的adblocks的代码直接搬过来的

@studentmain 9ee988d 只是将userrule单独出了一套逻辑,就像iptables一样链式匹配,PAC的生成和解析没动过。挺奇怪的。

看来得单独维护测试代理脚本。现在的gzip形式资源文件难以和项目本身一起维护。

倒是可以考虑不再gzip,反正主程序一直zip打包

我在Win7 VM里测试4.1.4是有这个问题的,关键是保存pac后要禁用再启用一次。

大家可以试一下这个版本,看有没有问题。第一次要更新一下pac才会生效:https://ci.appveyor.com/project/celeron533/shadowsocks-windows/builds/27564857/job/f302ls4yuv3406li/artifacts

问题源于ABP规则和GFWList规则的差异,在试图通过从头编写PAC解决。

问题源于ABP规则和GFWList规则的差异,在试图通过从头编写PAC解决。

理论上只要为 || 开头的域名规则结尾添加 ^ 就满足 ABP 的规则了:

  • ||example.com --> ||example.com^
  • ||example.com/sub/ --> ||example.com/sub/ (no change)

(uBlock Origin 应该是类似的做法,我没仔细翻源码。)

目前的版本加个斜杠的确可以了。

不过 gfwlist 里面那么多都没斜杠,不可能一个个的去加吧……

临时解决的话,用查找替换的方式工作量还是不大的。通配符或者正则表达式任君选择

问题源于ABP规则和GFWList规则的差异,在试图通过从头编写PAC解决。

https://github.com/komsomolskinari/pacfw ,基于https://github.com/xtons/smart-pac 以及自己之前的一些工作(主要是把解析GFWList的工作从PAC外面丢到了里面),还没加几个测试,不过看上去可以用。

Was this page helpful?
0 / 5 - 0 ratings