赞
踩
一个PAC文件包含一个JavaScript形式的函数“FindProxyForURL(url, host)”。
它是一段JavaScript 脚本:
- function FindProxyForURL(ur1,host)
-
- {
-
- return"DIRECT";
-
- }
上面就是一个最简洁的PAC文件,意思是所有流量都直接进入互联网,不走代理。
PAC 语法和函数
上面函数中,url字段就是我们在浏览器地址栏输入的待访问地址,host为该地址对应的hostname,return 语句有三种指令:
DIRECT,表示无代理直接连接
PROXY host:port,表示走host:port的proxy 服务
SOCKS host:port,表示走host:port的socks服务
而返回的接口可以是多个代理串联:
return"PROXY 222.20.74.89:8800;SOCKS 222.20.74.89:8899;DIRECT";
上面代理的意思是,默认走222.20.74.89:8800的proxy服务;如果代理挂了或者超时,则走222.20.74.89:8899的socks代理;如果 socks也挂了,则无代理直接连接。
PAC提供了几个内置的函数,下面挨个介绍下:
类似于==,但是对大小写不敏感,
- if(dnsDomainIs(host,"google.com")||
- dnsDomainIs(host,"www.google.com"))
-
- {
- return"DIRECT";
-
- }
正则匹配,*匹配用的比较多,可以是*http:/∥example.com,也是可以下面这样,
- if(shExplMatch(host,"vpn.domain.com)l|
- shExplMatch(ur1,"http://abcdomain.com/folder/*"))
- {
- return"DIRECT";
- }
判断是否在网段内容,比如10.1.0.0这个网段,10.1.1.0就在网段中,
- if(isInNet(dnsResolve(host),"172.16.0.0","255.240.0.0"))
-
- {
- return"DIRECT";
-
- }
返回主机的IP
- if(isInNet(myIpAddress(),"10.10.1.0","255.255.255.0))
- {
- return"PROXY 10.10.5.1:8080";
- }
通过DNS查询主机ip
- if(isInNet(dnsResolve(host),"10.0.0.0","255.0.0.0)||
- isInNet(dnsResolve(host),"172.16.0.0","255.240.0.0)l|
-
- isInNet(dnsResolve(host),"192.168.0.0","255.255.0.0)||
- isInNet(dnsResolve(host),"127.0.0.0","255.255.255.0"))
- {
- return"DIRECT";
- }
判断是否为诸如http://barret/,http://server-name/这样的主机名
- if(isPlainHostName(host))
-
- {
- return"DIRECT";
-
- }
判断主机是否可访问
- if(isResolvable(host)){
- return"PROXY proxyl.example.com:8080";
-
- }
举例一个全自动代理VPN服务器
- function FindProxyForURL(url, host) {
- if (shExpMatch(host, '10.134.*.*')) //地址是需要访问的地址
- {
- return 'PROXY *.*.*.*:端口';
- }
-
- else if (shExpMatch(host, '172.16.*.*')) //地址是需要访问的地址
- {
- return 'PROXY *.*.*.*:端口';
- }
-
- else
- {
- return 'DIRECT';
- }
- }
先介绍一下设置各个系统代理的方法。
Windows
Internet选项--连接 选项卡--局域网设置(如果是电脑拨号上网, 这里点'设置')-- 使用自动配置脚本--填入PAC地址--确定
Mac OS X
系统设置 -- 网络 --高级 --代理 --自动代理配置 --URL中填入PAC地址 -- 好
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。