>

PAC 全称是 Proxy Auto-Configuration,它是一个自动代理配置脚本,能够决定网络流量走默认通道还是代理服务器通道,控制的流量类型包括:HTTP、HTTPS 和 FTP。。如果我们不想全局都走代理,就可以选择 PAC 模式。

默认情况下,Shadowsocks 为我们提供了一个基础的 PAC 规则配置文件,里面大致列举了一些主流需要走代理的网站,比如 *.google.com, *.bbc.com 等等。

但是,还有很多网站也被屏蔽了,所以这时候就需要我们手动编辑 PAC 规则文件,以适应这些变化。但是显然很多人对 PAC 规则不是非常了解,那么这篇文章就来简单介绍 PAC 规则以及如何在 Shadowsock 客户端手动编辑该规则文件。

PAC 文件里面包含的是一个 JavaScript 语法的函数,这个函数长这样:

1
2
3
4
5
function FindProxyForURL(url, host){
// ...
}

ret = FindProxyForURL(url, host);

我们可以看到,这个函数有两个入参:url 和 host。

那么它们分别是很么形式呢?

  • url 就是要通过 proxy 访问的链接,链接前面的 http:// 去除。比如 google.com 就是一个合法 url。
  • host 是从 url 中抽取出来的 hostname。

返回值
返回值是一个字符串,可以是空,也可以是如下任何一种形式的字符串:

  • DIRECT 表示无代理直接连接
  • PROXY host:port 表示走host:port 的 proxy 服务
  • SOCKS host:port 表示走host:port 的 socks 服务
  • HTTP host:port
  • HTTPS host:port
  • SOCKS4 host:port
  • SOCKS5 host:port

返回值例子:
PROXY w3proxy.netscape.com:8080; PROXY mozilla.netscape.com:8081
PROXY w3proxy.netscape.com:8080; PROXY mozilla.netscape.com:8081; DIRECT
PROXY w3proxy.netscape.com:8080; SOCKS socks:1080

可以看到,而返回的接口可以是多个代理串联,比如:

1
return "PROXY 222.20.74.89:8800; SOCKS 222.20.74.89:8899; DIRECT";

上面介绍的是 PAC 脚本,Shadowsocks 通过执行该脚本来决定是否对某个 URL 进行网络代理。

PAC 对应的配置文件就是我们常见的 pac.txt (默认提供),如果我们需要自定义一个 rule,可以新建一个配置文件比如叫 user-rule.txt,然后根据规则填写即可。当然,也可以指直接在原 pac.txt 中进行添加和修改。

注:shadowsocks 目录下有一个 pac.txt 文件,而 pac.txt 这个文件是可以使用在线 PAC 或通过本地的 GWFlist 去更新的。所以不建议把自定义的规则直接加在 pac.txt 上面。

打开 pac.txt 文件,可以看到头部是如下内容:

可以看到,PAC 配置文件使用的是 JavaScript 语法,里面定义了一个变量 rules,是一个 Json 数组格式的数据类型,数组里面存放的是各种 URL 的通配符。

那么在 PAC 模式下,如果当访问符合这个数组里面任意一个 URL 通配符的网址时,系统会走代理,反之直连。比如访问谷歌搜索首页时,会走代理,而访问百度、新浪等国内网站则会选择直连方式。

比如,我们想要访问 ipip.net 这个网址的时候走代理,那么我们就需要添加如下一条规则

1
||ipip.net^

这个规则的意思是,任何以 ipip.net 为主的所有子域名包括自身,同时还有所有的互联网协议(http://, https:// 以及 ftp://),都走 Shadowsocks 代理。

编辑完 user-rule.txt 文件并保存后,记得在 Shadowsocks 中进行更新,否则规则不会生效的。
注:在 Mac 版的 ShadowsocksX-NG-R8 中编辑规则后,需要重启软件才会生效。

上述操作完成之后,我们在浏览器中打开 www.ipip.net 就会通过代理来访问而不是直接链接了。

注意:每一行规则末尾必须加上 ^ 符号,意思是这个规则在这个符号的地方结束。

通配符匹配规则

ShadowSocks 默认使用 GFWList 规则和使用 adblock plus 的引擎,下面介绍一下通配符匹配规则

  • 通配符支持。
    比如 *.example.com/* ,实际书写时可省略 * , 如 .example.com/*.example.com/* 效果一样
  • 正则表达式支持。
    以 \ 开始和结束, 如 \[\w]+:\/\/example.com\
  • 例外规则 @@
    如 @@.example.com/ 满足 @@ 后规则的地址不使用代理
  • 匹配地址开始和结尾 |
    |http://example.com, example.com| 分别表示以 http://example.com 开始和以 example.com 结束的地址
  • ||标记
    ||example.comhttp://example.com, https://example.com, ftp://example.com 等地址址满足条件。
  • 注释 ! 如 !我是注释
  • 分隔符^
    表示除了字母、数字或者 _ – . % 之外的任何字符。如 http://example.com^, http://example.com/http://example.com:8000/ 均满足条件,而 http://example.com.ar/ 不满足条件。

更多语法规则,可以参考 AdBlockPlus 过滤规则 AdBlockPlus


参考: https://doubibackup.com/3we1qxzj-6.html
全文完!

如果你对我的文章感兴趣,欢迎留言或者关注我的专栏。

微信公众号:“知辉”

搜索“deliverit”或

扫描二维码