代理 PAC 文件语法简介

英文参考阅读: http://findproxyforurl.com/example-pac-file/

基本语法

各种代理中的Pac规则文件其实都是一个包含有 FindProxyForURL(url, host) 方法的 JS 文件

function FindProxyForURL(url, host) {
    // 这里面写各种规则
    // 返回的是字符串:
    // - "DIRECT" 直接连接
    // - "PROXY: 127.0.0.1:1080"  代理连接
}


// *********
//   看个例子 
// *********
// 可以先把返回的结果弄成变量,省劲
var direct  = "DIRECT";
var socks   = "SOCKS5 127.0.0.1080";

function FindProxyForURL(url, host) {

// 如果域名匹配,直接连接
    if (dnsDomainIs(host, "intranet.domain.com") ||
        shExpMatch(host, "(*.abcdomain.com|abcdomain.com)"))
        return "DIRECT";

// 如果 URL 或者 协议匹配,直接连接
    if (url.substring(0, 4)=="ftp:" ||
        shExpMatch(url, "http://abcdomain.com/folder/*"))
        return "DIRECT";

// 如果访问的链接是内网,直接连接
    if (isPlainHostName(host) ||
        shExpMatch(host, "*.local") ||
        isInNet(dnsResolve(host), "10.0.0.0", "255.0.0.0") ||
        isInNet(dnsResolve(host), "172.16.0.0",  "255.240.0.0") ||
        isInNet(dnsResolve(host), "192.168.0.0",  "255.255.0.0") ||
        isInNet(dnsResolve(host), "127.0.0.0", "255.255.255.0"))
        return "DIRECT";

// 如果访问的IP属于一个子网,则通过代理访问
    if (isInNet(myIpAddress(), "10.10.5.0", "255.255.255.0"))
        return "PROXY 1.2.3.4:8080";

// 默认返回值,按照顺序选择可执行的,第一无法连接就换第二个
    return "PROXY 4.5.6.7:8080; PROXY 7.8.9.10:8080";
}

PAC 可执行一些方法有

详情参阅此处 http://findproxyforurl.com/pac-functions/

  • dnsDomainIs
  • shExpMatch
  • isInNet
  • myIpAddress
  • dnsResolve
  • isPlainHostName
  • localHostOrDomainIs
  • isResolvable
  • dnsDomainLevels
  • weekdayRange
  • dateRange
  • timeRange
  • alert

好了,可以做个自己的 PAC 文件了,放到浏览器的代理插件上,根据自己的需要,上网更科学。

猜你喜欢

转载自blog.csdn.net/KimBing/article/details/80011958
PAC
今日推荐