美文网首页
自动代理脚本

自动代理脚本

作者: 攻城狮_正 | 来源:发表于2021-02-08 11:38 被阅读0次

    代理上网有两种模式,一种是全局代理,所有的流量都走代理服务器,另一种是自动代理,根据规则决定是否使用代理。设置自动代理可以实现智能分流,多个代理服务器同时使用。

    实现自动代理的方案有多种,浏览器可以使用SwitchyOmega插件,安装Privoxy实现动态代理。本章使用的是PAC自动代理脚本,主要是因为它跨平台,无需安装第三方软件或插件,几乎所有的系统都支持。

    PAC代理脚本使用JavaScript语法,当系统设置PAC代理脚本后,浏览器执行请求时会先从脚本中的 FindProxyForURL 方法中获取代理服务器。

    function FindProxyForURL(url, host) {
        
        return "代理服务器";
    }
    

    参数说明:
    url
    前当请求的url,如:https://engr-z.com
    host
    当前url中的主机名,如:engr-z.com

    返回值说明:
    DIRECT
    不使用代理,示例:"DIRECT"
    PROXY
    使用http代理,示例:"PROXY 127.0.0.1:8888"
    SOCKS
    使用socks代理,示例:"SOCKS 127.0.0.1:1080"
    SOCKS5
    使用socks5代理,示例:"SOCKS5 127.0.0.1:1080"

    可以同时返回多个代理设置,用分号分隔,应用会依次按顺序检查返回一个可使用的代理服务器。示例:"SOCKS5 127.0.0.1:1080;PROXY 127.0.0.1:8888;DIRECT"
    优先使用socks5代理,如果不可用则使用http代理,如果http代理也不可用则跳过代理直接连接。

    内置函数

    PAC脚本支持基本的JavaScript语法,同时还内置一些函数可以帮助我们简化处理

    • isPlainHostName(host)

    判断是否为本地主机

    if (isPlainHostName(host)) {
        return "DIRECT";
    else
        return "PROXY proxy:80";
    }
    

    如果是本地主机直接连接,否则使用http代理

    • shExpMatch(host, "")

    匹配url,支持 *

    if (shExpMatch(url,"*.google.com/*")) {
        return "PROXY 192.168.1.1:3128";
    }
    
    • isInNet

    访问IP是否在某个子网内

    if (isInNet(host, "192.168.0.0", "255.255.225.0")) {
        return ""
    }
    

    更多函数以考:Proxy Auto-Configuration (PAC) file

    以下是我自己写的PAC脚本,可作为模板使用:

    var domains = {
        "google.com": 1,
        "youtube.com": 1
    };
     
    var proxy = "SOCKS5 127.0.0.1:1080; SOCKS 127.0.0.1:1080; PROXY 127.0.0.1:8888; 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;
    }
    

    只需在domains添加要代理的域名,如 facebook.com,twitter.com
    如果有多个代理,比如公司的网络走公司代理,可在 domains 中的值处理
    var domains = {
    "google.com": 1,
    "youtube.com": 1,
    "公司网络": 2
    };

    if (domains.hasOwnProperty(host) == "2") {
    return "公司代理"
    }

    设置PAC

    把PAC上传到http服务器,或者放本地,在系统设置网络中找到自动代理配置,填上PAC的访问地址即可。

    Windows:

    20210208111227.png

    Android:

    20210208111640.png

    IOS:

    20210208111901.jpg

    在手机上使用PAC脚本,可能会遇到某些APP不支持,这种情况需要使用Privoxy来做自动代理,将在后续介绍。


    除非注明,否则均为"攻城狮·正"原创文章,转载请注明出处。
    本文链接:https://engr-z.com/196.html

    相关文章

      网友评论

          本文标题:自动代理脚本

          本文链接:https://www.haomeiwen.com/subject/jhvxxltx.html