PAC 自動代理


最近看了 HTTP權威指南 里面有關於  代理的介紹,代理有很多種,今天主要來說說 自動代理PAC

PAC(Proxy Auto Config) 是一個 Script;經由編寫這個 Script,我們可以讓系統判斷在怎么樣的情形下,要利用哪一台 Proxy 來進行聯機

PAC文件是純文本格式的,實際上也是個Javascript文件。

在PAC文件中一定要定義 Function FindProxyForURL

//參數url是用戶輸入的url,參數host是url中的主機名。
function FindProxyForURL(url, host) {
    ...
}


此方法需要會return 一個Proxy動態組


描述 樣例
DIRECT 直接聯機而不透過 Proxy return "DIRECT";
PROXY host:port  使用指定的 Proxy 伺服機 return "192.168.22.22:3128;192.168.22.23:3128";
SOCKS host:port 使用指定的 Socks 伺服機 return "SOCKS5 127.0.0.1:1080; SOCKS 127.0.0.1:1080; DIRECT;";

關於 最后面的一個樣例我解釋下(其實就是順序問題):

1:先通過 ‘SOCKS5 127.0.0.1:1080’ 這個SOCKS5代理連接

2:如果1不行,通過‘SOCKS 127.0.0.1:1080’這個SOCKS代理連接

3:如果前面都不行,那就直接連接不走代理了


完整事例

事例一:

var domains = {
    "google.com": 1,
    "facebook.com": 1,
    "bing.com":1
};

var proxy = "SOCKS5 127.0.0.1:1080; SOCKS 127.0.0.1:1080; DIRECT;";

var direct = 'DIRECT;';

function FindProxyForURL(url, host) {
    var lastPos;
    do {
        if (domains.hasOwnProperty(host)) {
            return proxy;
        }
        lastPos = host.indexOf('.') + 1;
        host = host.slice(lastPos);
    } while (lastPos >= 1);
    return direct;
}


事例二:

function FindProxyForURL(url, host) { 
    if (shExpMatch(url,"*.google.com/*")) {
        return "PROXY 192.168.22.22:3128"; 
    } 
    
    if (shExpMatch(url, "*.wikipedia.com:*/*")) {
        return "SOCKS5 www.54php.cn:1080"; 
    } 
    
    if (isInNet(host, "10.0.0.0", "255.0.0.0")){ 
        return "DIRECT"; 
    } 
    
    return "DIRECT; PROXY 192.168.22.22:3128; SOCKS5 www.54php.cn:1080"; 
}


PAC文件可以使用的JavaScript函數

isPlainHostName isPlainHostName( host ) host 由網址取得的主機名稱。此 Function 會判斷 host 是否為不包含網域 (Domain)。如果是,則 return true;如果包含,則 return false。
dnsDomainIs dnsDomainIs( host, domain )host 由網址取得的主機名稱。domain 指定的網域。此 Function 會判斷 host 是否屬於網域 domain。如果是,則 return true;否,則 return false。
localHostOrDomainIs localHostOrDomainIs( host, hostdom )host 由網址取得的主機名稱。hostdom 完整的網域名稱。此 Function 會判斷 host 是否為 hostdom,或 host 是否為 hostdom 的主機名稱。如果是,則 return true;否,則 return false。
isResolvable isResolvable( host )host 由網址取得的主機名稱。此 Function 會嘗試透過 DNS 去解析 host,如果解析成功,則 return true;否則 return false。
isInNet isInNet( host, pattern, mask )host主機名稱,可以是 Domain Name 或 IP。如果是 Domain Name,則會透過 DNS 查出 IP。pattern IP。mask對應於 pattern 的屏蔽。此 Function 會 host 是否在指定的 IP 范圍內,如果是,則 return true;否則 return false。
dnsResolve

dnsResolve( host )host 要透過 DNS 解晰的主機名稱。此 Function 會透過 DNS 去解析 host,return 值即為解析之結果。

myIpAddress myIpAddress()此 Function 會 return 瀏覽器所在計算機之 IP 地址。
dnsDomainLevels dnsDomainLevels( host ) host 由網址取得的主機名稱。此 Function 會 return host 的 Domain 層數(點的數目)。
shExpMatch shExpMatch( str, shexp )str 要進行比對的字符串。shexp 比對的條件。此 Function 會比對 str 是否符合 shexp 的表示式(此表示式為 shell expression 而非 regular expressions)。如果是,則 return true;否則 return false。
weekdayRange
dateRange
timeRange



本人使用的翻牆軟件就是使用PAC,看截圖效果


600

600


參考資料:http://findproxyforurl.com/pac-functions/ 


如何使用shadowsocks翻牆,可以查看另一篇文章,免費翻牆利器:shadowsocks


原文地址: PAC 自動代理
標簽: pac    http    proxy    shadowsocks    socks    socks5   

智能推薦


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM