最近看了 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,看截图效果

参考资料:http://findproxyforurl.com/pac-functions/

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

原文地址:PAC 自动代理
标签:pac   http   proxy   shadowsocks   socks   socks5

智能推荐

PAC 自动代理的更多相关文章

  1. PAC自动代理文件格式,教你如何写PAC文件

    PAC文件格式 PAC文件是纯文本格式的,实际上就是JavaScript文件.Chrome/Chromium的扩展Switchy!的"Auto Switch Mode"功能实际上也 ...

  2. 浅析PAC,教你动手修改你的PAC文件及user-rule文件实现自动代理

    Shadowsocks作为现在一种很流行的穿墙工具,以其轻量级.速度感人等优点深受广大网友热捧.与VP_N相比,他就像一把锋利的”瑞士军刀”,不用受制于“系统全局代理”模式的困扰,控制更加便捷,基于S ...

  3. 浅析PAC,修改PAC文件及user-rule文件实现自动代理

    浅析PAC,修改PAC文件及user-rule文件实现自动代理 代理自动配置(英语:Proxy auto-config,简称PAC)是一种网页浏览器技术,用于定义浏览器该如何自动选择适当的代理服务器来 ...

  4. 使用BeanNameAutoProxyCreator实现spring的自动代理

    提到代理,我们可以使用ProxyBeanFactory,并配置proxyInterfaces,target和interceptorNames实现,但如果需要代理的bean很多,无疑会对spring配置 ...

  5. Spring AOP使用整理:自动代理以及AOP命令空间

    三.自动代理的实现 1.使用BeanNameAutoProxyCreator 通过Bean的name属性自动生成代理Bean. <bean class="org.springframe ...

  6. spring8——AOP之Bean的自动代理生成器

    对于上篇博客http://www.cnblogs.com/cdf-opensource-007/p/6464237.html结尾处提到的两个问题,可以使用spring提供的自动代理生成器解决.自动代理 ...

  7. SSM-Spring-15:Spring中名称自动代理生成器BeanNameAutoProxyCreator

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 名称自动代理生成器:BeanNameAutoProxyCreator 为了更好的测试,我放了俩个接口,俩个实现 ...

  8. SSM-Spring-14:Spring中默认自动代理DefaultAdvisorAutoProxyCreator

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 默认自动代理DefaultAdvisorAutoProxyCreator 本处没有什么要讲的,放原代码 ISo ...

  9. 【Go】go get 自动代理

    原文链接:https://blog.thinkeridea.com/201903/go/go_get_proxy.html 最近发现技术交流群里很多人在询问 go get 墙外包失败的问题,大家给了很 ...

随机推荐

  1. The import XXX cannot be resolved

    选择project --> clean后,OK.如果还不行,删掉全部import,然后按alt+/提示,逐个导入.

  2. mybatis 之 parameterType="String" resultType="java.util.HashMap">

    public ServiceMessage<Map<String, String>> getGoodsStockNo( List<Map<String, Strin ...

  3. React Native(三)——推送jpush-react-native

    瞬间,有种满血复活的赶脚…… 原因呢,就是熟悉了rn项目的套路:当老大问道,“推送功能看了还是没看呢?”的时候,虽然一直没有调试通,但还是不怯场的回答,“看了,按照网上说的也配了,但是还是用不了,不知 ...

  4. 关于控制台程序下使用mfc库中的函数时断言

    例如: TCHAR path[8192]; int len = getmodulefilename(afxgetinstancehandle(),path,8192);//会出现断言 如果没有选择支持 ...

  5. Java读取maven目录下的*.properties配置文件

    public class ReadProperties{ private static String proFileName = "/config/MQSubjectId.propertie ...

  6. 剑指offer面试题7:用两个栈实现队列

    题目1:用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 代码实现: public class Solution07 { Stack<Integer> ...

  7. 中间件系列三 RabbitMQ之交换机的四种类型和属性

    概述本文介绍RabbitMQ中交换机类型和属性,主要内容如下: 交换机的作用交换机的类型:Direct exchange(直连交换机).Fanout exchange(扇型交换机).Topic exc ...

  8. 【cs229-Lecture4】GLMS:选定指数分布族,如何用它来推导出GLM?

    在Lecture4中有3部分内容: Newton’s method        牛顿方法 Exceponential Family        指数分布族 Generalized Linear M ...

  9. Android studio 安装已经下载好的gradle.zip文件【ubuntu 14.04 LTS环境】

    一 下载 gradle-3.3-all.zip 包 http://download.csdn.net/detail/t6546545/9732412 http://www.fxxz.com/soft/ ...

  10. HR别掉坑里了,送你最精确的计薪算法!

      月工资的计算方式有多种多样.即便是资深的HR,也会犯常识性的错误,正算反算,哪一个方法更适合,有时还会容易出现数字偏差,回想一下,你们公司的工资是如何计算的? 第一 劳动工资计算标准按几天计算 根 ...