Chinaunix首页 | 论坛 | 博客

TS

  • 博客访问: 218648
  • 博文数量: 67
  • 博客积分: 2335
  • 博客等级: 大尉
  • 技术积分: 682
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-18 14:59
文章分类

全部博文(67)

文章存档

2017年(1)

2016年(1)

2014年(1)

2013年(3)

2012年(3)

2011年(8)

2010年(24)

2009年(13)

2008年(6)

2007年(7)

我的朋友

分类: WINDOWS

2010-07-30 15:42:30

如何让IE浏览器自动实现配置的转换呢?这就需要用到代理自动配置脚本(PAC-file:Proxy Auto-Config file) 了。自动配置脚本也就是PAC脚本,这是一种以.PAC为扩展名的JavaScript脚本,PAC脚本其实就是定义一个名为 “FindProxyForURL”的Java Script函数,该函数会被浏览器自动调用,从而实现代理服务器的自动转换。

  由于 我们的代理是反向(由外向内)的,脚本的具体内容如下:

  function findproxyforurl(host,url)

   {

  if (shexpmatch(host,"*.jigang.com.cn"))

    return "proxy 218.XXX.XXX.30:8080"

  else if (shexpmatch(host,"172.16.*.*"))

   return "proxy 218.XXX.XXX.30:8080"

  else

   return "direct"

  }

   这段脚本的含义就是:如果是访问内网OA的请求(域名为jigang.com.cn),则使用代理,如果访问内网的某些网址(IP地址 为:172.16.*.*),则使用代理,除此之外的所有请求则不使用代理而直接连接。

  将上述脚本内容保存为一个扩展名为PAC的脚 本文件,如C:proxy.pac。

  然后我们设置IE浏览器把“自动配置脚本选项”指向它,完成集中设置代理配置的工作。我们只需一 次性配置完毕,让IE自动识别是否使用代理服务器,而无需手动转换,从而实现访问内、外网站的自动转换。

  IE的代理设置里面有一个 “使用自动配置脚本”的选项,这里的具体设置如下:

  自动配置脚本设置:打开浏览器,选择“工具/Internet选项/连接/局域网 配置”,随后勾选“使用自动脚本配置”项,最后输入自动配置脚本所存在地址即可(比如file://C:proxy.pac,如图2)。

   图2 设置本机自动配置脚本

  当然我们也可以将这个脚本文件放在Wrb服务器上,这样不用为每台客户机都写一个PAC文件了,只需要 在“使用自动配置脚本”的地址处填入相关的IP地址就行了。比如:。在IE中的设置见图 3。

   图3 设置网络自动配置脚本

  这样做的好处是,我们可以随意修改代理脚本从而改变代理服务器的地址或端口等而不用去修改每台客户机的 PAC文件了。

信息由 收集整理 转载请标明出处

PAC文件格式

PAC文件是纯文本格式的,实际上就是JavaScript文件。Chrome/Chromium的扩展Switchy!的"Auto Switch Mode"功能实际上也是创建和维护一个简单的PAC文件,但功能比较弱。

对于一般的应用,即使你几乎不懂JavaScript和编程,也可以通过本文的介绍实现基本的功能。

PAC文件FindProxyForURL函数

PAC文件中必须包含一个函数:FindProxyForURL(url, host)。

参数url是用户输入的url,参数host是url中的主机名。

比如url为, 那么host就是

一个最简单的PAC文件内容如下:

function FindProxyForURL(url, host) {
return "DIRECT";
}

这个PAC文件实际上什么也没做,对任何URL,都将"DIRECT"(直接连网)。

PAC文件返回值类型

除了可以return "DIRECT"以外,还有两种常用方式:

PROXY proxysample.com:8080

http代理的主机和端口,主机也可以用IP表示

SOCKS5 socks5sample.com:1080

socks5代理的主机和端口,主机也可以用IP表示

那么,我们可以猜测到,用pac指定一个http代理应该这样写

function FindProxyForURL(url, host) {
return "PROXY 192.168.1.1:3128";
}

甚至可以指定多个代理  

function FindProxyForURL(url, host) {
return "DIRECT; PROXY 192.168.1.1:3128; SOCKS5 lilinux.net:1080";
}

这句语句的意思是:

  1. 对所有URL,都直接连接;
  2. 如果不能直接连接,那么就使用192.168.1.1:3128这个http代理连接;
  3. 如果还是不能连接,则使用lilinux.net:1080这个socks5代理连接。

使用不同连接的顺序和语句中的顺序一致,你可以根据自己的实际情况更改。

也许你明确知道哪些网站不能直连,必须用PROXY或者SOCKS5连接,那么可以对站点分别指定代理配置

function FindProxyForURL(url, host) {
if (shExpMatch(url,"*.google.com/*")) {
return "PROXY 192.168.1.1:3128";
}
if (shExpMatch(url, "*.wikipedia.com:*/*")) {
return "SOCKS5 lilinux.net:1080";
}
if (isInNet(host, "10.0.0.0", "255.0.0.0")){
return "DIRECT";
}
return "DIRECT; PROXY 192.168.1.1:3128; SOCKS5 lilinux.net:1080";
}

这个PAC文件中引入了两个新的函数,但从字面意思上,我们也可以猜出代码的大概意思:

  1. 当url是*.google.com/* 时,自动使用PROXY代理;
  2. 当url是*.wikipedia.cm/*时,自动使用SOCKS5代理;
  3. 当host是10.0.0.0 /255.0.0.0的子网内时,自动直连;
  4. 如果都不匹配,则依次按DIRECT、PROXY、SOCKS5的次序尝试。

shExpMatch函数用来匹配url或者host,匹配的方式和DOS的通配符相似。例如前面用到的"*.google.com/*"可以匹配 任意包含".google.com/"的字符串。

Chrome/Chromium 的扩展Switchy!创建的pac文件还自定义了一个函数,可以用来匹配正则表达式,不过个人认为在url匹配上通常不需要使用强大的正则表达式。

isInNet函数用来返回请求的host是否在指定的域内。值得注意的是,isInNet的第二个参数必须是 IP,不能是主机名。因此需要把主机名转换成IP。比如"isInNet(host, dnsResolve(), "255.255.255.0")"讲到这里,应该可以解决你的问题了吧。

PAC文件可以使用的JavaScript函数

当然PAC也不止这么简单,它还提供了不少其它函数,在本文就不详细讲述了。 中列出了PAC代理文件中可以使用的JavaScript函数。

你也许想把pac文件发布到Internet上,这样其它用户就只需要在浏览器中指定pac文件的url即可。你得配置你的服务器映射 .pac 文件后缀到MIME类型: application/x-ns-proxy-autoconfig 如果使用的是Netscape服务器,编辑 config 目录下的 mime.types 文 件。如果是Apache, CERN or NCSA服务器,使用 AddType 指令。



阅读(2483) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~