-
PAC-通用跨设备的智能“跨栏”法 发表于 2011年01月23日 2 条评论作为一个身在天朝的资深互联网从业者或是使用者,有一项众所周知的运动是难免要参与的。由于是全民健身运动的重要组成部分,网上自然遍地大把大把的各类跨栏方法,VPN、HTTP TUNNEL、Tor、Auto Proxy等等五花八门,各有各的特点。不过作为一个重度的Geek,我有跨栏需求的上网设备包括Windows、Linux Server、iPhone、Windows Mobile等十件上下,一一搞下来还是有些小蛋疼的。 虽然不折腾就会死,但真的往死里折腾还是能免则免了。
总的来说,需求无非就是要让一些会一头撞死在墙上的访问(非死不可之类,你肯定懂的)去到一个有门或者有窗又或者有戏的地方,从而正常的过去,让那些本来就和谐美满的访问各找各妈。而且不出意外的话,这些访问基本上十有八九都是http或者https。于是就想起一个很久很久以前就存在的东西——PAC。
PAC是Proxy Auto Config的简写,主流的浏览器和上网设备都支持,通过一个JavaScript语法的脚本,PAC能根据你访问的URL决定这个请求是走http代理、socks代理或是直接请求。所以,使用的前提是你必须有一个有门或者有窗又或者有戏的地方(赞美Whygod师弟,赞助了海外SSH帐号一枚),没有的同学还请先找你们的自由门或者无界什么的。另外一个相对简单些,特别是对技术宅们来说简单得多的需求,就是有一个能发布完整文件的地方(能上传文件并且无需登录就可以打开的就好)。PAC在这里的作用主要在于实现不同的请求策略,类似于AutoProxy,但这个是在Web上放置的,对任意设备、任意浏览器来说,只需指定PAC文件的url就可以了,不需要考虑其他浏览器上有没有AutoProxy,要不要同步设置。
好了,废话说完,上代码:
function FindProxyForURL(url, host) { var proxyDomains = [ "facebook.com", "fbcdn.net", "twitter.com", ]; for (var i = 0; i < proxyDomains.length; i++) { if (dnsDomainIs(host, proxyDomains[i])) { return "SOCKS5 a.b.c.d:p"; } } return "DIRECT"; }其中可以根据需要修改的地方有:
- a.b.c.d和p,应为你的有门或者有窗又或者有戏的地方。
- proxyDomains里可以增加其他的域名后缀如appspot等。
- return的代理如果是HTTP类型的,则应将SOCKS5替换为PROXY。
- 如果在代理不可用的情况下,还是要走直接访问,或者是有备用代理,可以这样改:return "PROXY a.b.c.d:p; SOCKS a.b.c.d2:p2; DIRECT"; 。
更多的PAC语法,可以自行Google。
Update [2011-02-12]:
如果所在地区存在DNS污染,可以通过启用Remote DNS来解决。
Firefox下,由于Remote DNS性能一般较差,并非默认开启,需要打开about:config,并在过滤器中输入network.proxy.socks_remote_dns,双击将其设置为True。
Chrome可以通过插件来开启这个,IE就没办法了。
最后贴几张图,IE、Firefox、iPhone/iPod的设置方法(最后一张图来自www.jejer.net):



相关日志:
相关日志:



掌柜的 2011年03月17日 17:10