《Proxypac代理原理介绍.docx》由会员分享,可在线阅读,更多相关《Proxypac代理原理介绍.docx(8页珍藏版)》请在三一办公上搜索。
1、Proxypac代理原理介绍Proxy.pac代理原理介绍 Proxy Auto Config 什么是 Proxy Auto Config ? 首先,我们一定要知道什么是 Proxy?他的功用是什么?如果还不知道,可以参照这份文件。 而 PAC(Proxy Auto Config) 又是什么呢?它实际上是一个 Script;经由编写这个 Script,我们可以让系统判断在怎么样的情形下,要利用哪一台 Proxy 来进行联机。这样做主要的好处有: 1. 分散 Proxy 的流量,避免 Proxy Server 负载过高 2. 针对个别条件设定、加快浏览速度 3. 设定要求顺序,在某台 Proxy
2、 无法联机时,可自动尝试别种联机方式 Proxy Auto Config File 的格式 基本上 Proxy Auto Config File是一个纯文字文件,他的语法采用 JavaScript;所以建议要学习编写 PAC 的人,最好先学习基本的 JavaScript。一个 PAC 档必需是单独的 JavaScript,其中不能包含任何 HTML 标签。 在 PAC 档中,一定要定义 Function FindProxyForURL 如下: function FindProxyForURL( url, host ) . 如果使用了 PAC 档,则浏览器在接受我们要求的网址后,会去执行 ret
3、 = 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.
4、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
5、 isPlainHostName( host ) host 由网址取得的主机名称。 此 Function 会判断 host 是否为不包含网域 (Domain)。如果是,则 return true;如果包含,则 return false。 范例: 1. isPlainHostName(www) 会 return true 2. isPlainHostName() 会 return false dnsDomainIs( host, domain ) host 由网址取得的主机名称。 domain 指定的网域。 此 Function 会判断 host 是否属于网域 domain。如果是,则 retu
6、rn true;否,则 return false。 范例: 1. dnsDomainIs(, ) 会 return true 2. dnsDomainIs(www, ) 会 return false 3. dnsDomainIs(, ) 会 return false localHostOrDomainIs( host, hostdom ) host 由网址取得的主机名称。 hostdom 完整的网域名称。 此 Function 会判断 host 是否为 hostdom,或 host 是否为 hostdom 的主机名称。如果是,则 return true;否,则 return false。 范例
7、: 1. localHostOrDomainIs(, ) 会 return true 2. localHostOrDomainIs(www, ) 会 return true 3. localHostOrDomainIs(, ) 会 return false 4. localHostOrDomainIs(, ) 会 return false isResolvable( host ) host 由网址取得的主机名称。 此 Function 会尝试透过 DNS 去解析 host,如果解析成功,则 return true;否则 return false。 范例: 1. isResolvable() 会
8、 return true 2. isResolvable(bogus.domain.foobar) 会 return false 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.2
9、55.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 此 Funct
10、ion 会 return 浏览器所在计算机之 IP 地址。 dnsDomainLevels( host ) host 由网址取得的主机名称。 此 Function 会 return host 的 Domain 层数。 范例: 1. dnsDomainLevels(www) 会 return 0。 2. dnsDomainLevels() 会 return 2。 shExpMatch( str, shexp ) str 要进行比对的字符串。 shexp 比对的条件。 此 Function 会比对 str 是否符合 shexp 的表示式。如果是,则 return true;否则 return fa
11、lse。 范例: 1. shExpMatch( */ari/*) 会 return true 2. shExpMatch( */ari/*) 会 return false weekdayRange、dateRange、timeRange 这三个 Function 的功用都是检查线在时间是否在指定范围内,用这些 Function 就可以设定分时段使用 Proxy Server。但由于较为繁琐,如有兴趣或需要,请参考原始文件。 范例 1.中央大学数学系之设定 2. function FindProxyForURL( url, host ) 3. if ( dnsDomainIs( host, lo
12、cahost ) | dnsDomainIs( host, .edu.tw ) | isInNet( host, 140.0.0.0, 255.0.0.0 ) | isPlainHostName( host ) ) 4. 5. return DIRECT; PROXY proxy.csie.ncu.edu.tw:3128; + PROXY cache.math.ncu.edu.tw:3128; 6. /localhost、 domain 是 .edu.tw、IP 为 140.*.*.* 或只有 Host Name 7. /则直接联机;如果直接联机不行,则尝试使用 proxy.csie 和 ca
13、che.math 8. else if ( dnsDomainIs( host, .tw ) ) 9. 10. return PROXY proxy.csie.ncu.edu.tw:3128; + PROXY cache.math.ncu.edu.tw:3128; + DIRECT; 11. /如果网域是 .tw,则依序尝试 proxy.csie、cache.math、直接联机 12. else 13. return PROXY cache.math.ncu.edu.tw:3128; + PROXY proxy.csie.ncu.edu.tw:3128; + DIRECT; 14. /其它:依
14、序尝试 cache.math、proxy.csie、直接联机 15. 16. 中央大学计算器中心提供之设定 17. function FindProxyForURL(url,host) 18. 19. var RFC=1234567890-_qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM.; 20. for(var i=0;i host.length;i+) 21. 22. var c=host.charAt(i); 23. if(RFC.indexOf(c)=-1 & !(dnsDomainIs(host, .cc) | dnsDomainIs(host,.tw) 24. / alert(url+-+host); 25. return PROXY .tw:3127; 26. 27. 28. if(host = ) 29. return PROXY .tw:80; 30. 31. if(dnsDomainIs(host, .tw) 32. 33. return DIRECT; 34. 35. return PROXY proxy.ncu.edu.tw:3128; PROXY cache.ncu.edu.tw:3128; DIRECT; 36.