最近看了 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. video标签 api

    video 设置及控制:http://www.w3school.com.cn/tags/html_ref_audio_video_dom.asp video 事件:http://www.w3schoo ...

  2. linux 网卡配置信息

    vi /etc/sysconfig/network-scripts/ifcfg-eth0

  3. 全屏加载loading显示的解决方法

    step1:可以在网页里加一个div用来现实loading. <div id="loading"> <!--这里放你的loading时显示的动画或者文字--> ...

  4. mybatis 之 parameterType="List" 2

    <select id="queryGoodsByGoodsNoPcweb" parameterType="List" resultMap="si ...

  5. 手机CPU

    说起手机CPU的历史,笔者给大家提一个问题:"世界上第一款智能手机是什么呢?"相信很多人的答案是爱立信的R380或诺基亚的7650,但都不对,真正的首款智能手机是由摩托罗拉在200 ...

  6. 【cs229-Lecture7】支持向量机(SVM)

    SVM不错的学习资料: 百度网盘链接: http://pan.baidu.com/s/1hqw0Rnm 密码: asec blog:http://www.blogjava.net/zhenandaci ...

  7. Maven —— scope 元素的值及其含义

    1.compile 缺省值,所属依赖在所有的classpath中可用,同时它们也会被打包(随着项目一起发布). 2.provided 只有当JDK或者某个容器已提供该依赖之后才使用.如servlet. ...

  8. Elasticsearch学习之ES节点类型以及各种节点的分工

    ES各种节点的分工 1. 客户端节点 当主节点和数据节点配置都设置为false的时候,该节点只能处理路由请求,处理搜索,分发索引操作等,从本质上来说该客户节点表现为智能负载平衡器.独立的客户端节点在一 ...

  9. Android MediaScanner

    一.MediaScanner 的使用 1)Intent.ACTION_MEDIA_SCANNER_SCAN_FILE:扫描指定文件 public void scanFileAsync(Context ...

  10. kafka 的quick start(windows平台)

    h1, h2, h3, h4, h5, h6, p, blockquote { margin: 5px; padding: 5; } body { font-family: "Helveti ...