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


参考资料:http://findproxyforurl.com/pac-functions/
如何使用shadowsocks翻墙,可以查看另一篇文章,免费翻墙利器:shadowsocks
原文地址:PAC 自动代理
标签:pac http proxy shadowsocks socks socks5
智能推荐
PAC 自动代理的更多相关文章
- PAC自动代理文件格式,教你如何写PAC文件
PAC文件格式 PAC文件是纯文本格式的,实际上就是JavaScript文件.Chrome/Chromium的扩展Switchy!的"Auto Switch Mode"功能实际上也 ...
- 浅析PAC,教你动手修改你的PAC文件及user-rule文件实现自动代理
Shadowsocks作为现在一种很流行的穿墙工具,以其轻量级.速度感人等优点深受广大网友热捧.与VP_N相比,他就像一把锋利的”瑞士军刀”,不用受制于“系统全局代理”模式的困扰,控制更加便捷,基于S ...
- 浅析PAC,修改PAC文件及user-rule文件实现自动代理
浅析PAC,修改PAC文件及user-rule文件实现自动代理 代理自动配置(英语:Proxy auto-config,简称PAC)是一种网页浏览器技术,用于定义浏览器该如何自动选择适当的代理服务器来 ...
- 使用BeanNameAutoProxyCreator实现spring的自动代理
提到代理,我们可以使用ProxyBeanFactory,并配置proxyInterfaces,target和interceptorNames实现,但如果需要代理的bean很多,无疑会对spring配置 ...
- Spring AOP使用整理:自动代理以及AOP命令空间
三.自动代理的实现 1.使用BeanNameAutoProxyCreator 通过Bean的name属性自动生成代理Bean. <bean class="org.springframe ...
- spring8——AOP之Bean的自动代理生成器
对于上篇博客http://www.cnblogs.com/cdf-opensource-007/p/6464237.html结尾处提到的两个问题,可以使用spring提供的自动代理生成器解决.自动代理 ...
- SSM-Spring-15:Spring中名称自动代理生成器BeanNameAutoProxyCreator
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 名称自动代理生成器:BeanNameAutoProxyCreator 为了更好的测试,我放了俩个接口,俩个实现 ...
- SSM-Spring-14:Spring中默认自动代理DefaultAdvisorAutoProxyCreator
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 默认自动代理DefaultAdvisorAutoProxyCreator 本处没有什么要讲的,放原代码 ISo ...
- 【Go】go get 自动代理
原文链接:https://blog.thinkeridea.com/201903/go/go_get_proxy.html 最近发现技术交流群里很多人在询问 go get 墙外包失败的问题,大家给了很 ...
随机推荐
- Android文件系统编译出错记录
错误1: 注意:external/protobuf/java/src/main/java/com/google/protobuf/GeneratedMessageLite.java 使用了未经检查或不 ...
- Jenkins构建触发器
我们在执行Jenkins的项目构建的时候一般都是通过web管理界面中的”构建”来执行项目构建操作,但是除此之外我们还可以通过项目配置中的”构建触发器”来触发构建操作, 其中”构建触发器”有一种方 ...
- 将百度编辑器ueditor用在easyui中
又一个自己想深爱却一直被拖着的对象--百度编辑器(ueditor) 但终究逃不过再次把它"供奉"起来的宿命,这不今天又得好好研究一下它的使用方法,以免自己今后再次使用时的各种不便- ...
- 二叉查找树(BST)的性质
二叉查找树的性质: 1.左子树上所有结点的值均小于或等于它的根结点的值. 2.右子树上所有结点的值均大于或等于它的根结点的值. 3.左.右子树也分别为二叉排序树. 下图中这棵树,就是一颗典型的二叉查找 ...
- cp自动创建层级结构的例子
一个拷贝命令的技巧,不仅拷贝文件,而且拷贝目录结构.记录下来. *拷贝的时候,自动创建参数中源文件的路径:#cp --parents parentdir1/parentdir2/sourcefile ...
- thinkphp5 URL的访问
ThinkPHP采用单一入口模式访问应用,对应用的所有请求都定向到应用的入口文件,系统会从URL参数中解析当前请求的模块.控制器和操作,下面是一个标准的URL访问格式: localhost/index ...
- <转>Python: __init__.py 用法
转自 http://www.cnblogs.com/BeginMan/p/3183629.html python的每个模块的包中,都有一个__init__.py文件,有了这个文件,我们才能导入这个目录 ...
- 【docker】使用docker 安装 宝塔面板
拉取centos基础镜像,用容器启动该基础镜像,直接在这个容器中部署 1 拉取纯净系统镜像 docker pull centos: 2 启动镜像,映射主机与容器内8888端口 docker run - ...
- 【图算法】Dijkstra算法及变形
图示: 模版: /* Dijkstra计算单源最短路径,并记录路径 m个点,n条边,每条边上的权值非负,求起点st到终点et的最短路径 input: n m st et 6 10 1 6 1 2 6 ...
- 深入理解 Neutron -- OpenStack 网络实现(4):网络名字空间
问题导读1.如何查看网络名字空间?2.网络名字空间开头的名字有什么规律?3.dhcp服务是如何实现的?4.router的实现是通过iptables进行的是否正确?5.SNAT和DNAT规则有什么作用? ...