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 墙外包失败的问题,大家给了很 ...
随机推荐
- The import XXX cannot be resolved
选择project --> clean后,OK.如果还不行,删掉全部import,然后按alt+/提示,逐个导入.
- mybatis 之 parameterType="String" resultType="java.util.HashMap">
public ServiceMessage<Map<String, String>> getGoodsStockNo( List<Map<String, Strin ...
- React Native(三)——推送jpush-react-native
瞬间,有种满血复活的赶脚…… 原因呢,就是熟悉了rn项目的套路:当老大问道,“推送功能看了还是没看呢?”的时候,虽然一直没有调试通,但还是不怯场的回答,“看了,按照网上说的也配了,但是还是用不了,不知 ...
- 关于控制台程序下使用mfc库中的函数时断言
例如: TCHAR path[8192]; int len = getmodulefilename(afxgetinstancehandle(),path,8192);//会出现断言 如果没有选择支持 ...
- Java读取maven目录下的*.properties配置文件
public class ReadProperties{ private static String proFileName = "/config/MQSubjectId.propertie ...
- 剑指offer面试题7:用两个栈实现队列
题目1:用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 代码实现: public class Solution07 { Stack<Integer> ...
- 中间件系列三 RabbitMQ之交换机的四种类型和属性
概述本文介绍RabbitMQ中交换机类型和属性,主要内容如下: 交换机的作用交换机的类型:Direct exchange(直连交换机).Fanout exchange(扇型交换机).Topic exc ...
- 【cs229-Lecture4】GLMS:选定指数分布族,如何用它来推导出GLM?
在Lecture4中有3部分内容: Newton’s method 牛顿方法 Exceponential Family 指数分布族 Generalized Linear M ...
- 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/ ...
- HR别掉坑里了,送你最精确的计薪算法!
月工资的计算方式有多种多样.即便是资深的HR,也会犯常识性的错误,正算反算,哪一个方法更适合,有时还会容易出现数字偏差,回想一下,你们公司的工资是如何计算的? 第一 劳动工资计算标准按几天计算 根 ...