10
2011

翻墙利器,Proxy Auto Config

使用 Google 搜索时总是很容易碰触到 GFW 脆弱的神经,解决这个问题的办法是使用代理服务器。对于 Chrome 和 Firefox 来说,有大把的扩展来设置代理服务器,其它浏览器呢?

其实主流的浏览器都支持一种智能的代理设置方式:Proxy Auto Config。pac 是一个 JavaScript 脚本文件,它提供了一个函数FindProxyForUrl,根据浏览器访问的 url 返回不同的代理地址。FindProxyForUrl 可以返回下面三种形式的代理:

  • DIRECT // 不使用代理,直接访问
  • PROXY HOST:PORT // 使用代理,HOST为服务器地址,PORT为代理端口
  • SOCKS HOST:PORT //  使用SOCKS代理,同上

在网上找个代理服务器是简单的,也是很麻烦的。你总能找到大把大把的代理服务器列表,但是并不是全部都是有效的,实际上只有极少部分短期有效。于是有了各种 VPN 实现方案,比如 TOR。TOR 也不是很稳定,总要在使用和不使用代理间切换。

这时就可以让 FindProxyForUrl 返回代理列表,每个代理使用分号隔开。浏览器将依次使用代理服务器尝试访问每个链接,直到成功访问或者代理列表结束。比如 “PROXY 127.0.0.1:8118;DIRECT” 先尝试使用 TOR 访问目标,失败的话再尝试直接访问。

代理列表虽然可以解决服务器失效/不稳定的问题,但每一次尝试都要花费一些时间。为了减少花费的时间,你可以在 PAC 里对 URL 进行分析,对不同的域名、IP、内容返回不同的代理服务器。在 PAC 里除了正常的 JavaScript 函数外,还可以使用 PAC 特有的函数:

  • isPlainHostName(host); // host 为不包含域名的主机名时返回真(没有点号)
  • dnsDomainIs(host,domain); // host 为 domain 子域时返回真
  • localHostOrDomainIs(host,hostdom); // host 和 hostdom 相同或 host 为 hostdom 的主机名时返回真
  • isResolvable(host); // 尝试通过 DNS 解析 host,成功返回真
  • isInNet(host,pattern,mask); // host 的 IP 在指定范围内时返回真(先解析 host 的 IP 地址,再与 mask 做按位与计算,结果与 pattern 比较)
  • dnsResolve(host); // 解析 host,返回 IP 地址
  • myIpAddress(); // 返回本机 IP 地址
  • dnsDomainLevels(host); // 根据 host 包含点号数量返回域名层级
  • shExpMatch(str,shext); // 使用 shell 表达式对 str 和 shext 进行匹配
  • weekdayRange(); // 检查时间是否在指定范围(一周的第几天)
  • dataRange(); // 检查时间是否在指定范围(月、日)
  • timeRange(); // 检查时间是否在指定范围(时间)

除了常规的使用外,FindProxyForUrl 还可以返回一个无效的代理服务器来过滤广告、不安全网址等内容。

2 Responses to “翻墙利器,Proxy Auto Config”

  1. 谢谢楼主分享,找了半天翻墙软件终于找到了

  2. 谢谢楼主分享,找了半天翻墙软件终于找到了

Leave a Reply

点击图片上的十字中心提交评论。