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.vincentguo.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.vincentguo.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

本人使用的FQ软件就是使用PAC,看截图效果

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

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

智能推荐

  • Mysql 常用命令集
  • 开启 NFS 文件系统提升 Vagrant 共享目录的性能
  • Squid 操作实践
  • Ubuntu apparmor何方神圣
  • Ubuntu Nginx下配置网站ssl实现https访问
时间: 2024-12-29 07:27:49

PAC 自动代理的相关文章

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

PAC文件格式 PAC文件是纯文本格式的,实际上就是JavaScript文件.Chrome/Chromium的扩展Switchy!的"Auto Switch Mode"功能实际上也是创建和维护一个简单的PAC文件,但功能比较弱. 对于一般的应用,即使你几乎不懂JavaScript和编程,也可以通过本文的介绍实现基本的功能. PAC文件FindProxyForURL函数  PAC文件中必须包含一个函数:FindProxyForURL(url, host). 参数url是用户输入的url,

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

对于上篇博客http://www.cnblogs.com/cdf-opensource-007/p/6464237.html结尾处提到的两个问题,可以使用spring提供的自动代理生成器解决.自动代理生成器可以让我们把切面织入目标对象方法时不用再使用ProxyFactoryBean这个类来生成代理对象了,同时可以把切面织入多个代理代理对象,并且在获取代理对象时使用的是目标对象的id来获取,这符合正常的使用习惯. spring提供了两个自动代理生成器,一个是DefaultAdvisorAutoPr

redsocks2 自动代理设置

redsock2 可以把一些不支持透明代理的代理服务器重定向一下,这样可以实现透明代理了 redsock2安装很简单直接make就可以了, ubuntu需要 apt-get intsll libevent-2.0-5 libssl-dev 安装完成后,直接把 redsocks2 复制到相关目录即可. 我这用它做网关, 然后测试了一下,http 和 https 不能一起走,要分开 #http.conf base {   log_debug = off;    log_info = off;   d

使用BeanNameAutoProxyCreator实现spring的自动代理

提到代理,我们可以使用ProxyBeanFactory,并配置proxyInterfaces,target和interceptorNames实现,但如果需要代理的bean很多,无疑会对spring配置文件的编写带来繁重的工作 Spring为我们提供了,根据beanName匹配后进行自动代理的解决方法 业务接口 package AutoProxyOne;public interface Shopping {  public String buySomething(String type);  pu

自动代理生成器

public interface ISomeService { public void doSome(); public void doSecont(); } 类 public class MyAfterReturningAdvice implements AfterReturningAdvice { public void afterReturning(Object o, Method method, Object[] objects, Object o1) throws Throwable

Spring《八-一》CGLIB代理和自动代理

CGLIB代理 配置文档 1 <bean id="logProxy" class="org.springframework.aop.framework.ProxyFactoryBean"> 2 <property name="proxyTargetClass"> 3 <value>true</value> 4 </property> 5 <property name="t

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

三.自动代理的实现 1.使用BeanNameAutoProxyCreator 通过Bean的name属性自动生成代理Bean. <bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"> <property name="beanNames"> <list> <value>*Target</value>

spring(AOP,基于代理AOP实现,自动代理AOP实现,基于AspectJAOP[注解]实现)

----------------AOP------------------ ----------------------基于代理的AOP实现------------------------------------- 1.创建接口类,实现类 2.引入spring支持,勾选AOP支持 3.创建实现类的bean,代理类的bean 4.创建代理类并实现一下两个接口 5.定义切入点 6.定义通知(绑定一个代理),advice--->代理类,pointcut----->切入点 7.定义代理工厂 targe

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

------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 名称自动代理生成器:BeanNameAutoProxyCreator 为了更好的测试,我放了俩个接口,俩个实现类: ISomeService接口: package cn.dawn.day18auto02; /** * Created by Dawn on 2018/3/8. */ public interface ISomeService { public void insert(); public voi