zoukankan      html  css  js  c++  java
  • 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直接联机而不透过 Proxyreturn "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函数

    isPlainHostNameisPlainHostName( host ) host 由网址取得的主机名称。此 Function 会判断 host 是否为不包含网域 (Domain)。如果是,则 return true;如果包含,则 return false。
    dnsDomainIsdnsDomainIs( host, domain )host 由网址取得的主机名称。domain 指定的网域。此 Function 会判断 host 是否属于网域 domain。如果是,则 return true;否,则 return false。
    localHostOrDomainIslocalHostOrDomainIs( host, hostdom )host 由网址取得的主机名称。hostdom 完整的网域名称。此 Function 会判断 host 是否为 hostdom,或 host 是否为 hostdom 的主机名称。如果是,则 return true;否,则 return false。
    isResolvableisResolvable( host )host 由网址取得的主机名称。此 Function 会尝试透过 DNS 去解析 host,如果解析成功,则 return true;否则 return false。
    isInNetisInNet( 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 值即为解析之结果。

    myIpAddressmyIpAddress()此 Function 会 return 浏览器所在计算机之 IP 地址。
    dnsDomainLevelsdnsDomainLevels( host ) host 由网址取得的主机名称。此 Function 会 return host 的 Domain 层数(点的数目)。
    shExpMatchshExpMatch( 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   

    智能推荐

  • 相关阅读:
    VS2010-MFC(Ribbon界面开发:创建Ribbon样式的应用程序框架)
    VS2010-MFC(图形图像:GDI对象之画刷CBrush)
    VS2010-MFC(图形图像:GDI对象之画笔CPen)
    VS2010-MFC(图形图像:CDC类及其屏幕绘图函数)
    VS2010-MFC(字体和文本输出:文本输出)
    VS2010-MFC(字体和文本输出:CFont字体类)
    VS2010-MFC(MFC常用类:MFC异常处理)
    矩阵快速幂
    Codeforces 510C (拓扑排序)
    UVA10305 Ordering Tasks
  • 原文地址:https://www.cnblogs.com/apanly/p/5169804.html
Copyright © 2011-2022 走看看