本文主要讨论的是浏览器代理服务器设置技术,文中出现的人名、公司名或者域名均为化名,如有雷同,纯属巧合。
在某些地方上网时,比如南京大学的校园网中,某些公司的局域网中,我们可能需要用到代理服务器。代理服务器的切换一直是一个让人头痛的话题,IE 浏览器有一个 ProxySwither Lite 软件可以用来切换代理,Firefox 有一批插件可以用来切换代理,但是,很难用它们来解决全局性的问题,使用前的配置也是比较麻烦的事情。那么,有没有一种方法可以一劳永逸地解决这个问题呢?答案是有的,那就是 PAC(Proxy Auto-Config) 文件。
使用 PAC 文件我们可以做到:1. IE、Firefox、Opera...浏览器使用同一个代理配置方案,Windows、Linux多系统使用同一个代理配置方案;2. 针对特定的域名,使用特定的代理;3. 针对特定的 IP 范围,使用特定的代理;4. 针对特定的 URL 模式,使用特定的代理。
下面我们来看一个案例:
假设小明的电脑位于 C 公司的局域网中,C 公司为了某些需要禁止员工访问某些站点,例如: alogspot.com 和 bwitter.com ,但是小明的工作和学习需要经常访问这些站点,公司的网管给小明带来了很大不便。不过小明很聪明,他找到了一个可以访问被禁那些站点的一个代理 127.0.0.1:8000。虽然通过该代理小明可以访问这些站点,但是切换代理和浏览器设置始终是麻烦;特别是在用 doogle.com 搜索到的某些文章位于 alogspot.com 时,一不小心点了搜索结果,到搜索引擎 doogle.com 的连接就会有很大一会儿被重置。因为小明的代理速度比较慢,总不能用代理上所有网站吧?这真是件麻烦事,小明该怎么办呢?
虽然很头痛,但是互联网的开拓者们给我们留下了那么多遗产,怎么能不好好利用呢?小明翻出了一个尘封已久的 Wiki 页面,缓缓回忆起那古老的 Javascript 语言,顿时有了主意,于是他写出了下面这个 PAC 脚本:
// 看看域名是不是本地站点
function isLocalHost(host)
{
if( dnsDomainIs(host, "localhost") )
return true;
return false;
}
// 看看域名是不是禁止访问的站点
function isBlockedHost(host)
{
if( dnsDomainIs(host, "alogspot.com") ||
dnsDomainIs(host, "bwitter.com") )
return true;
return false;
}
// 看看搜索结果 URL 中是不是包含被禁止访问的关键字
function isBlockedURL(url, host)
{
if( dnsDomainIs(host, "doogle.com") ) {
if ( shExpMatch(url, "*alogspot.com*") ||
shExpMatch(url, "*bwitter.com*") )
return true;
}
return false;
}
// 看看 IP 在不在本地 IP 范围内
function isLocalIP(addr)
{
if( isInNet(addr,"127.0.0.0","255.0.0.0") ||
isInNet(addr,"10.0.0.0","255.0.0.0") ||
isInNet(addr,"192.168.0.0","255.255.0.0") ||
isInNet(addr,"172.16.0.0","255.255.0.0") )
return true;
return false;
}
// 看看 IP 在不在被禁止访问的 IP 范围内
function isBlockedIP(addr)
{
return false;
}
// 看看 IP 地址是不是 IPv6 地址
function isIPV6(addr)
{
if( shExpMatch(addr, "*:*") )
return true;
return false;
}
// 这是浏览器默认调用的函数接口
function FindProxyForURL(url, host)
{
var direct = "DIRECT";
var httpProxy = "PROXY localhost:8000";
var socksProxy = "SOCKS localhost:9050"; // 留着做个参考
if(isLocalHost(host)) {
// 如果是本地域名,那就直连
return direct;
} else if(isBlockedURL(url, host) || isBlockedHost(host)) {
// 如果是被禁止访问的域名,或者搜索结果 URL 中含有被禁止访问的关键词,那就走代理
return httpProxy;
}if(!isResolvable(host)) {
// 如果域名不能解析,那就直连
return direct;
}
// 解析域名到 IP 地址
var IpAddr = dnsResolve(host);if(isLocalIP(IpAddr) || isIPV6(IpAddr)) {
// 如果是本地 IP 或者 IPv6 地址,那就直连
return direct;
} else if(isBlockedIP(IpAddr)) {
// 如果是被禁止访问的地址,那就走代理
return httpProxy;
} else {
// 剩下的,唉,就直连吧
return direct;
}
}
小明将以上内容保存为 C:proxy.pac(~/proxy.pac),然后到
Firefox 中,选择 工具->选项->高级->网络->设置(Edit->Preferences->Advanced->Network->Settings),将 file:///c:/proxy.pac(file:///home/username/proxy.pac)填入“自动代理配置 URL”(Automatic proxy configuration URL)文本框中;
再到
IE 中,选择 工具->Internet 选项->连接->局域网设置,勾选使用自动配置脚本,填入 file://c:/proxy.pac;
再到
Opera 中,选择 Tools->Preferences->Advanced->Network->Proxy Servers,勾选上 Use automatic proxy configuration,填入 file://c:/proxy.pac。
从此,小明就开始了自己幸福的互联网冲浪生活,再也没有看到那曾经熟悉的“到该网站的连接已被重置”消息了。
--
Posted By GFW Blog to GFW Blog at 7/14/2009 01:55:00 A
--~--~---------~--~----~------------~-------~--~----~
GFW Blog又被封了,您可以通过以下网址翻墙访问:
https://meme2028.appspot.com/chinagfw.org/
https://soproxy.appspot.com/chinagfw.org/
https://proxytea.appspot.com/chinagfw.org/
https://quick-proxy.appspot.com/chinagfw.org/
https://free4internet.appspot.com/chinagfw.org/ 。 您也可以使用Google Reader订阅我们,订阅地址:http://chinagfw.org/feeds/posts/default。
To unsubscribe from this group, send email to
gfw-blog+unsubscribe@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/gfw-blog?hl=zh-CN
-~----------~----~----~----~------~----~------~--~---
没有评论:
发表评论