最近看了 HTTP权威指南 里面有关于 代理的介绍,代理有很多种,今天主要来说说 自动代理PAC
PAC(Proxy Auto Config) 是一个 Script;经由编写这个 Script,我们可以让系统判断在怎么样的情形下,要利用哪一台 Proxy 来进行联机
PAC文件是纯文本格式的,实际上也是个Javascript文件。
在PAC文件中一定要定义 Function FindProxyForURL
//参数url是用户输入的url,参数host是url中的主机名。 function FindProxyForURL(url, host) { ... }
此方法需要会return 一个Proxy动态组
值 | 描述 | 样例 |
DIRECT | 直接联机而不透过 Proxy | return "DIRECT"; |
PROXY host:port | 使用指定的 Proxy 伺服机 | return "192.168.22.22:3128;192.168.22.23:3128"; |
SOCKS host:port | 使用指定的 Socks 伺服机 | return "SOCKS5 127.0.0.1:1080; SOCKS 127.0.0.1:1080; DIRECT;"; |
关于 最后面的一个样例我解释下(其实就是顺序问题):
1:先通过 ‘SOCKS5 127.0.0.1:1080’ 这个SOCKS5代理连接
2:如果1不行,通过‘SOCKS 127.0.0.1:1080’这个SOCKS代理连接
3:如果前面都不行,那就直接连接不走代理了
完整事例
事例一:
var domains = { "google.com": 1, "facebook.com": 1, "bing.com":1 }; var proxy = "SOCKS5 127.0.0.1:1080; SOCKS 127.0.0.1:1080; DIRECT;"; var direct = 'DIRECT;'; function FindProxyForURL(url, host) { var lastPos; do { if (domains.hasOwnProperty(host)) { return proxy; } lastPos = host.indexOf('.') + 1; host = host.slice(lastPos); } while (lastPos >= 1); return direct; }
事例二:
function FindProxyForURL(url, host) { if (shExpMatch(url,"*.google.com/*")) { return "PROXY 192.168.22.22:3128"; } if (shExpMatch(url, "*.wikipedia.com:*/*")) { return "SOCKS5 www.vincentguo.cn:1080"; } if (isInNet(host, "10.0.0.0", "255.0.0.0")){ return "DIRECT"; } return "DIRECT; PROXY 192.168.22.22:3128; SOCKS5 www.vincentguo.cn:1080"; }
PAC文件可以使用的JavaScript函数
isPlainHostName | isPlainHostName( host ) host 由网址取得的主机名称。此 Function 会判断 host 是否为不包含网域 (Domain)。如果是,则 return true;如果包含,则 return false。 |
dnsDomainIs | dnsDomainIs( host, domain )host 由网址取得的主机名称。domain 指定的网域。此 Function 会判断 host 是否属于网域 domain。如果是,则 return true;否,则 return false。 |
localHostOrDomainIs | localHostOrDomainIs( host, hostdom )host 由网址取得的主机名称。hostdom 完整的网域名称。此 Function 会判断 host 是否为 hostdom,或 host 是否为 hostdom 的主机名称。如果是,则 return true;否,则 return false。 |
isResolvable | isResolvable( host )host 由网址取得的主机名称。此 Function 会尝试透过 DNS 去解析 host,如果解析成功,则 return true;否则 return false。 |
isInNet | isInNet( host, pattern, mask )host主机名称,可以是 Domain Name 或 IP。如果是 Domain Name,则会透过 DNS 查出 IP。pattern IP。mask对应于 pattern 的屏蔽。此 Function 会 host 是否在指定的 IP 范围内,如果是,则 return true;否则 return false。 |
dnsResolve |
dnsResolve( host )host 要透过 DNS 解晰的主机名称。此 Function 会透过 DNS 去解析 host,return 值即为解析之结果。 |
myIpAddress | myIpAddress()此 Function 会 return 浏览器所在计算机之 IP 地址。 |
dnsDomainLevels | dnsDomainLevels( host ) host 由网址取得的主机名称。此 Function 会 return host 的 Domain 层数(点的数目)。 |
shExpMatch | shExpMatch( str, shexp )str 要进行比对的字符串。shexp 比对的条件。此 Function 会比对 str 是否符合 shexp 的表示式(此表示式为 shell expression 而非 regular expressions)。如果是,则 return true;否则 return false。 |
weekdayRange | |
dateRange | |
timeRange |
本人使用的FQ软件就是使用PAC,看截图效果
参考资料:http://findproxyforurl.com/pac-functions/
原文地址:PAC 自动代理
标签:pac http proxy shadowsocks socks socks5
智能推荐
- Mysql 常用命令集
- 开启 NFS 文件系统提升 Vagrant 共享目录的性能
- Squid 操作实践
- Ubuntu apparmor何方神圣
- Ubuntu Nginx下配置网站ssl实现https访问
时间: 2024-12-29 07:27:49