您的位置:首页 > 其它

Proxy Auto Config

2010-11-11 10:52 253 查看
Proxy Auto Config

什么是 Proxy Auto Config

首先,我们一定要知道什么是 Proxy?他的功用是什么?如果还不知道,可以参照这份文件

而 PAC(Proxy Auto Config) 又是什么呢?它实际上是一个 Script;经由编写这个 Script,我们可以让系统判断在怎么样的情形下,要利用哪一台 Proxy 来进行联机。这样做主要的好处有:

1. 分散 Proxy 的流量,避免 Proxy Server 负载过高

2. 针对个别条件设定、加快浏览速度

3. 设定要求顺序,在某台 Proxy 无法联机时,可自动尝试别种联机方式

Proxy Auto Config File 的格式

基本上 Proxy Auto Config File(以下简称 PAC)是一个纯文字文件,他的语法采用 JavaScript;所以建议要学习编写 PAC 的人,最好先学习基本的 JavaScript。一个 PAC 档必需是单独的 JavaScript,其中不能包含任何 HTML 标签。

在 PAC 档中,一定要定义 Function FindProxyForURL 如下:

function FindProxyForURL( url, host )

{

...

}

如果使用了 PAC 档,则浏览器在接受我们要求的网址后,会去执行

ret = FindProxyForURL( url, host );

这样的指令。其中,url 是所要求网址的完整路径,host 是对方的计算机名称(就是在 :// 和 / 之中的部份);而 return 值 ret 则是 Proxy 的组态,它的格式有下列三种:

· DIRECT 直接联机而不透过 Proxy

· PROXY host:port 使用指定的 Proxy 伺服机

· SOCKS host:port 使用指定的 Socks 伺服机

比如说当浏览器得到的是 Proxy proxy.ncu.edu.tw:3128; Proxy proxy.csie.ncu.edu.tw:3128; DIRECT 的话,那浏览器会先尝试透过 proxy.ncu.edu.tw 来开启网页,如果无法使用,则尝试 proxy.csie.ncu.edu.tw,还是不行的话,就直接联机。

PAC 中特别的 Function

在 PAC 中,除了可以使用一般 JavaScript 的 Function 外,它还定义了一些特别的 Function 可以使用:

· isPlainHostName()

· dnsDomainIs()

· localHostOrDomainIs()

· isResolvable()

· isInNet()

· dnsResolve()

· myIpAddress()

· dnsDomainLevels()

· shExpMatch()

· weekdayRange()

· dateRange()

· timeRange()

isPlainHostName( host )

host 由网址取得的主机名称。

此 Function 会判断 host 是否为不包含网域 (Domain)。如果是,则 return true;如果包含,则 return false。

范例:

1. isPlainHostName("www") 会 return true

2. isPlainHostName("www.netscape.com") 会 return false

dnsDomainIs( host, domain )

host 由网址取得的主机名称。

domain 指定的网域。

此 Function 会判断 host 是否属于网域 domain。如果是,则 return true;否,则 return false。

范例:

1. dnsDomainIs("www.netscape.com", ".netscape.com") 会 return true

2. dnsDomainIs("www", ".netscape.com") 会 return false

3. dnsDomainIs("www.mcom.com", ".netscape.com") 会 return false

localHostOrDomainIs( host, hostdom )

host 由网址取得的主机名称。

hostdom 完整的网域名称。

此 Function 会判断 host 是否为 hostdom,或 host 是否为 hostdom 的主机名称。如果是,则 return true;否,则 return false。

范例:

1. localHostOrDomainIs("www.netscape.com", "www.netscape.com") 会 return true (完全相同)

2. localHostOrDomainIs("www", "www.netscape.com") 会 return true (主机名称相同)

3. localHostOrDomainIs("www.mcom.com", "www.netscape.com") 会 return false (网域不同)

4. localHostOrDomainIs("home.netscape.com", "www.netscape.com") 会 return false (主机名称不同)

isResolvable( host )

host 由网址取得的主机名称。

此 Function 会尝试透过 DNS 去解析 host,如果解析成功,则 return true;否则 return false。

范例:

1. isResolvable("www.netscape.com") 会 return true (除非 DNS 无法正常运作)

2. isResolvable("bogus.domain.foobar") 会 return false (除非真的冒出这个 domain 出来…)

isInNet( host, pattern, mask )

host 主机名称,可以是 Domain Name 或 IP。如果是 Domain Name,则会透过 DNS 查出 IP。

pattern IP。

mask对应于 pattern 的屏蔽。

此 Function 会 host 是否在指定的 IP 范围内,如果是,则 return true;否则 return false。

范例:

1. isInNet(host, "198.95.249.79", "255.255.255.255") 当 host 为 198.95.249.79 时,会 return true。

2. isInNet(host, "140.115.0.0", "255.255.0.0") 当 host 为 140.115.*.* 时,会 return true。

dnsResolve( host )

host 要透过 DNS 解晰的主机名称。

此 Function 会透过 DNS 去解析 host,return 值即为解析之结果。

范例:

1. dnsResolve("www.math.ncu.edu.tw") 会 return "140.115.25.9"。

myIpAddress()

此 Function 会 return 浏览器所在计算机之 IP 地址。

dnsDomainLevels( host )

host 由网址取得的主机名称。

此 Function 会 return host 的 Domain 层数(点的数目)。

范例:

1. dnsDomainLevels("www") 会 return 0。

2. dnsDomainLevels("www.netscape.com") 会 return 2。

shExpMatch( str, shexp )

str 要进行比对的字符串。

shexp 比对的条件。

此 Function 会比对 str 是否符合 shexp 的表示式(此表示式为 shell expression 而非 regular expressions)。如果是,则 return true;否则 return false。

范例:

1. shExpMatch("http://home.netscape.com/people/ari/index.html", "*/ari/*") 会 return true

2. shExpMatch("http://home.netscape.com/people/montulli/index.html", "*/ari/*") 会 return false

weekdayRange()dateRange()timeRange()

这三个 Function 的功用都是检查线在时间是否在指定范围内,用这些 Function 就可以设定分时段使用 Proxy Server。但由于较为繁琐,如有兴趣或需要,请参考原始文件
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: