自动代理检测脚本Proxy.PAC的配置说明
只要连上局域网就可以上网了.
function FindProxyForURL(url,host){
- return "direct";
}
}
把以上代码另存为proxy.pac的文件,如:c:\proxy.pac,然后在IE的菜单里"工具"->"INTEL选项"->"连接"->局域网设置
把使用自动配置脚本选上,然后在地址栏填入file://c:/proxy.pac,注意file后是两斜杠,要使设置生效,需要关闭IE再重新打开.
现在我们介绍下这个proxy.pac脚本文件,脚本的语法是js语法,js的内置函数可以使用,要实现自动配置代理,需要实现FindProxyForURL这个函数,其参数url代表要访问的连接,host代表要访问连接的主机名,该函数有三个返回参数 direct:直接连接 proxy IP
PAC的其他内置语法见http://wp.netscape.com/eng/mozil ... emo/proxy-live.html
PAC脚本另外一个重要的应用是多台代理服务器并存的情况下,通过pac脚本的控制:
用户随机选择使用多台代理服务器中的任意一台来达到流量负载均衡的目的; 管理员通过PAC脚本控制用户使用和不使用某台代理服务器,这样可以空出时间对代理服务器进行维护; 让服务器工作在主备模式,当主服务器宕机时,会自动切换到其它备用服务器而不会中断服务; 根据访问目的地的不同,自动选择最佳代理服务器。
下面列举几个PAC的实例,顺便学习下它的语法
a、isPlainHostName(host),本例演示判断是否为本地主机,如http://myservername/
- if (isPlainHostName(host))
- return "DIRECT";
- return "
ROXY proxy:80";
- return "DIRECT";
- function FindProxyForURL(url, host)
- if ((isPlainHostName(host) ||
dnsDomainIs(host, ".company.com")) &&
!localHostOrDomainIs(host, "www.company.com") && !localHostOrDomainIs(host, "home.company.com")) return "DIRECT";
- return "
ROXY proxy:80";
- function FindProxyForURL(url, host)
- if (isResolvable(host))
- return "DIRECT";
- return "
ROXY proxy:80";
- return "DIRECT";
- function FindProxyForURL(url, host)
的方式访问,如果是直接连接,否则使用代理 function FindProxyForURL(url, host) {
{
- if (isInNet(host, "166.111.0.0", "255.255.0.0"))
- return "DIRECT";
- return "
ROXY proxy:80";
- return "DIRECT";
}
e、shExpMatch(host, ""),本例演示根据主机域名来改变连接类型,本地主机、*.edu、
- .com分别用不同的连接方式。 function FindProxyForURL(url, host) {
- if (isPlainHostName(host))
- return "DIRECT";
- return "
ROXY comproxy:80";
- return "
ROXY eduproxy:80";
- return "
ROXY proxy:80";
- return "DIRECT";
- if (isPlainHostName(host))
f、url.substring(),本例演示根据不同的协议来选择不同的代理,http、https、ftp、
- gopher分别使用不同的代理。 function FindProxyForURL(url, host) {
- if (url.substring(0, 5) == "http:") {
- return "
ROXY proxy:80";
else if (url.substring(0, 4) == "ftp:") {- return "
ROXY fproxy:80";
else if (url.substring(0, 7) == "gopher:") {- return "PROXY gproxy";
else if (url.substring(0, 6) == "https:") {- return "PROXY secproxy:8080";
- return "DIRECT";
- return "
- if (url.substring(0, 5) == "http:") {
function FindProxyForURL(url, host) {
- return "PROXY secproxy:8080";
- } else {
- return "PROXY proxy:80";
- return "PROXY proxy:80";
if (dnsResolve(host) == "166.111.8.237") {
}
- h、myIpAddress(),本例演示判断本地IP是否某个IP,如果是就使用代理,否则直接使 用连接。 function FindProxyForURL(url, host) {
- if (myIpAddress() == "166.111.8.238") {
- return "PROXY proxy:80";
- return "DIRECT";
- return "PROXY proxy:80";
- function FindProxyForURL(url, host)
- if (dnsDomainLevels(host) > 0) { // if number of dots in host > 0
- return "PROXY proxy:80";
- return "DIRECT";
- return "PROXY proxy:80";
- if(weekdayRange("WED", "SAT", "GMT"))
- return "PROXY proxy:80";
- return "DIRECT";
- return "PROXY proxy:80";
- if (myIpAddress() == "166.111.8.238") {
function FindProxyForURL(url,host) {
- return randomProxy();
}
function randomProxy() {
- switch( Math.floor( Math.random() * 5 ) ) {
- case 0:
- return "PROXY proxy1:80"; break;
- return "PROXY proxy2:80"; break;
- return "PROXY proxy3:80"; break;
- return "PROXY proxy4:80"; break;
- return "PROXY proxy5:80"; break;
- return "PROXY proxy1:80"; break;
- case 0:
}