[javascript]代码库
/*
* 本 PAC 地址:http://t.xd.cn/ 欢迎内部传播
* 本 PAC 通过 Dropbox 更新。需要编辑权限的,可以告诉你的 Dropbox 帐号,Share 一下就好了
*
* 建议复制一个临时文件来修改,用 jslint 检查语法
* Mac 下安装 jslint
* brew install jslint
* jslint -process index.pac
* 没装 brew 的,先装个:/usr/bin/ruby -e "$(curl -fsSL https://raw.github.com/gist/323731)
*
* 某些黑名单域名,用我的DNS服务器的话,就会解析到境内IP,解析到这些IP时,不需要翻墙
* DNS 服务器:180.153.139.245 180.153.139.246 上海电信服务器,网通用户请勿使用,否则境内很多大网站的 CDN 会把你分配到上海电信附近的服务器
*
* BTW,如果需要根据IP来翻墙,可以用 http://t.xd.cn/ip 但是IP列表非常多,客户端解析会很耗CPU
*
* by xdanger@gmail.com, 最近更新:2012.03.03 1:30
*/
function FindProxyForURL(url, host) {
var _socks_us = "SOCKS 115.182.64.62:8881";
var _socks_hk = "SOCKS 115.182.64.62:8883";
var _socks_tw = "SOCKS t.xd.cn:8888";
var _http_prx = "PROXY t.xd.cn:8890";
var _wl_dom = [ ".verycd.com", ".baidu.com", ".qq.com" ];
var _wl_url = [];
var _wl_add = [ ['203.208.0.0', '255.255.0.0'] ];
// 麻烦添加网站前先搜索一下,所有 .jp/.tw/.hk/.cc 域名已经都进去了
var _bl_dom = [
".10gbfreehost.com",
".1bao.org",
".500px.com",
".500px.net",
".aboluowang.com",
".addthis",
".aircrack-ng.org",
".amazon.com",
".amazonaws.com",
".amazonwebservices.com",
".appspot.com",
".asahichinese.com",
".avhappy.com",
".bang-olufsen.com",
".bao.li",
".battle.net",
".bbc.co.uk",
".bit.ly",
".blogger.com",
".blogsmithmedia.com",
".blogspot.com",
".bullogger.com",
".caucho.com",
".cc",
".chinagfw.org",
".cl.ly",
".cmule.com",
".cmule.info",
".cmule3.info",
".cmule5.info",
".cnn.com",
".curse.com",
".daahoo.com",
".dajiyuan.com",
".davebalmain.com",
".delicious.com",
".demonoid",
".developer.android.com",
".dropbox.com",
".dropboxatwork.com",
".echofon.com",
".engadget.com",
".epochtimes.com",
".evernote.com",
".facebook.com",
".facebook.net",
".fbcdn.net",
".fc2.com",
".feedburner.com",
".feedly.com",
".ff.im",
".flickr.com",
".foursquare",
".freakshare.com",
".freemorenews.com",
".fsck.com",
".funp.com",
".ggpht.com",
".git-scm.com",
".gitcasts.com",
".golang.org",
// Google 解析到的是境内IP,不需要代理
// 而且国外服务器无法访问Google境内的IP,所以用了代理反而会连不上!
// 如果有个别域名确实需要代理,请加具体域名
//".google.com",
".googleusercontent.com",
".googlevideo.com",
".googlevideo.com.cn",
".grandfg.com",
".greasespot.net",
".gstatic.com",
".hdbits.org",
".hecaitou.net",
".hellotxt",
".hellowtext.com",
".hemidemi.com",
".hermanmiller.com",
".hk",
".html5quintus.com",
".hulu.com",
".ikan.pptv.com",
".imageporter.com",
".imageshack.us",
".imdb.com",
".imdb.com",
".img.ly",
".instagr.am",
".instwall",
".internic.com",
".itunes.apple.com",
".iyin.net",
".j.mp",
".jp",
".kenengba.com",
".lighthouseapp.com",
".live.com",
".livejournal.com",
".loveyahu.nu",
".mail-archive.com",
".mediafire.com",
".mindmeister.com",
".mitbbs.com",
".mobile01.com",
".5i01.com",
".myblog.yahoo.com",
".myminicity.com",
".namecheap.com",
".nanorails.com",
".netshelter.net",
".opera.com",
".pandora.com",
".path.com",
".peacehall.com",
".pixnet.net",
".photoload.ru",
".pinyuan001.com",
".playup.com",
".plurk.com",
".progit.org",
".queenlook.com",
".rfa.org",
".rubygems.org",
".safaribooksonline.com",
".secretchina.com",
".sgp.cm",
".sourceforge.net",
".staticflickr.com",
".supersized.org",
".t.co",
".technorati.com",
".thepiratebay.org",
".torproject.org",
".tumblr.com",
".tw",
".tw.yahoo.com",
".twitpic",
".twitter.com",
".tweetdeck.com",
".twitterfeed.com",
".typepad.com",
".ultraxs.com",
".uncyclopedia",
".ustream.tv",
".uwants.com",
".v2ex.com",
".vimeo.com",
".vimeocdn.com",
".voanews.com",
".vox.com",
".w3schools.com",
".wenxuecity.com",
".wikileaks.org",
".wikimedia.org",
".wikinews.org",
".wikipedia.org",
".wunderlist.com",
".wordpress.com",
".wp.com",
".wuala.com",
".xuite.net",
".xys.org",
".xysblogs.org",
".yfrog.com",
".yimg.com",
".yindows.com",
".youtube.com",
".zaobao.com",
".zaozon.com",
".ziphone.org",
".zuo.la",
".zuola.com",
"asahichinese.com",
"bit.ly",
"delicious.com",
"fbcdn-photos-a.akamaihd.net",
"fbcdn-profile-a.akamaihd.net",
"git-scm.com",
"html5quintus.com",
"instagr.am",
"path.com",
"plus.google.com",
"progit.org",
"sgp.com",
"twitter.com",
"t.co",
"vimeo.com",
"wunderlist.com",
"wordpress.com"
];
// 尽量加域名,匹配速度会快,节约CPU。不行的再加URL模糊匹配
var _bl_url = [ "*/search?q=cache:*" ];
var _bl_add = [ ["180.168.41.0", "255.255.255.0"], ["66.6.36.36", "255.255.255.254"], ["74.125.31.103", "255.255.0.0"] ];
var i = 0;
// 判断境内IP
var ip = dnsResolve(host);
for (i = 0; i < _wl_add.length; i++) {
if (isInNet(ip, _wl_add[i][0], _wl_add[i][1])) { return "DIRECT"; }
}
// 白名单域名
for (i = 0; i < _wl_dom.length; i++) {
if (dnsDomainIs(host, _wl_dom[i])) { return "DIRECT"; }
}
// 白名单URL
for (i = 0; i < _wl_url.length; i++) {
if (shExpMatch(url, _wl_url[i])) { return "DIRECT"; }
}
// Dropbox 需要用 http 代理才能即时获取更新
/* HTTP 代理好像不好用
var _http_dom = [ '.dropbox.com' ];
for (i = 0; i < _http_dom.length; i++) {
if (dnsDomainIs(host, _http_dom[i])) { return _http_prx; }
}
*/
// 使用美国代理
var _us_dom = [ '.pandora.com' ];
for (i = 0; i < _us_dom.length; i++) {
if (dnsDomainIs(host, _us_dom[i])) { return _socks_us; }
}
// 黑名单域名
for (i = 0; i < _bl_dom.length; i++) {
if (dnsDomainIs(host, _bl_dom[i])) { return _http_prx; }
}
// 黑名单URL
for (i = 0; i < _bl_url.length; i++) {
if (shExpMatch(url, _bl_url[i])) { return _http_prx; }
}
for (i = 0; i < _bl_add.length; i++) {
if (isInNet(ip, _bl_add[i][0], _bl_add[i][1])) { return _http_prx; }
}
// 默认
return "DIRECT";
}