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 墙外包失败的问题,大家给了很 ...
随机推荐
- 【Leaflet】鼠标提取坐标
map.on('mousemove', function (e) { document.getElementById('info').innerHTML = /* innerHTML 属性设置或返回表 ...
- Redis 集群配置
Redis 集群介绍: (1) 为什么要使用集群:如果数据量很大,单台机器会存在存储空间不够用 .查询速度慢 .负载高等问题,部署集群就是为了解决这些问题(2) Redis 集群架构如下,采用无中心结 ...
- CentOS7--Firewalld防火墙
Firewalld服务是红帽RHEL7系统中默认的防火墙管理工具,特点是拥有运行时配置与永久配置选项且能够支持动态更新以及"zone"的区域功能概念,使用图形化工具firewall ...
- [PyCharm] 设置自动启动时自动打开项目
设置启动PyCharm时自动打开(或不打开)上次进行的项目: 选择 “Settings - General - Reopen last project on startup”,勾选该选项则启动时自动打 ...
- thinkjs中修改默认主键
报错信息: { Error: ER_BAD_FIELD_ERROR: Unknown column 'a_role.id' in 'field list' 还原场景: a_role这张表没有自增的id ...
- js 中的break continue return
break:跳出整个循环 1.当i=6时,就跳出了整个循环,此for循环就不继续了: continue:跳出当前循环,继续下一次循环: return :指定函数返回值 1.在js当中,常使用retur ...
- 《Lua程序设计》9.1 协同程序基础 学习笔记
协同程序(coroutine)与线程(thread)差不多,也就是一条执行序列,拥有自己独立的栈.局部变量和指令指针,同时又与其他协同程序共享全局变量和其他大部分东西.从概念上讲线程与协同程序的主要区 ...
- Struts2(五)数据校验
一.概述 在提交表单数据时,如果数据需要保存到数据库,空输入等可能会引发一些异常,为了避免引起用户的输入引起底层异常,通常在进行业务逻辑操作之前,先执行基本的数据校验. 下面通过两种方式来阐述Stru ...
- 使用CreateProcess创建新的process 并返回process运行结束返回值
转自:http://blog.csdn.net/zgl7903/article/details/5975284 转载这篇主要是记住:获得create的新进程运行结束时的返回值的方法 如下: #in ...
- .NET二级域名共享Session
ASP.NET二级域名站点共享Session状态 今天, 我要写的是如何在二级域名站点之间,主站点和二级域名站点之间共享Session. 首先, Session要共享,站点之间SessionID必须要 ...