Skip to content

Instantly share code, notes, and snippets.

@xream
Forked from ayanamist/proxy.pac
Created August 31, 2012 02:45
Show Gist options
  • Save xream/3548268 to your computer and use it in GitHub Desktop.
Save xream/3548268 to your computer and use it in GitHub Desktop.
My Pac File for Auto Proxy
var PROXY = {
"direct":"DIRECT",
"goagent":"PROXY 127.0.0.1:8087",
"vps":"PROXY 127.0.0.1:8123",
"edu":"PROXY 127.0.0.1:4080",
"sogou":"PROXY 127.0.0.1:8083",
"tele":"PROXY 127.0.0.1:4480"
};
var ALL = [
{
// Direct Section
"proxy":"direct",
"net":[
"127.0.0.1",
"192.168.0.0/255.255.0.0",
"172.16.0.0/255.255.0.0"
],
"domain":[
"localhost",
".tjmu.edu.cn",
".hust.edu.cn",
".tongjitv.com",
".tjstart.com"
]
},
{
// Long Connection Section
"proxy":"vps",
"domain":[
".rapidshare.com",
"mobile.twitter.com",
"userstream.twitter.com"
]
},
{
// GFW Section
"proxy":"goagent",
"domain":[
".simplecd.me",
".simplecd.org",
".jav4you.com",
".pinterest.com",
".ihavesun2012.com",
".sourceforge.net",
".soundofhope.org",
".epochtimes.com",
".dw.de",
".xuite.net",
".tinybucks.net",
".qqc.co",
".jingpin.org",
".slideshare.net",
".tysurl.com",
".zff.co",
"r.twimg.com",
"tw.myblog.yahoo.com",
".mimip2p.net",
".touch99.com",
"cl.eye.rs",
".iphone-dev.org",
"www.owind.com",
".posterous.com",
".licdn.com",
".ykhandler.com",
"twitter-badges.s3.amazonaws.com",
".multiupload.com",
".cuophiepgiet.net",
".cyanogenmod.com",
".careercup.com",
".shell909090.com",
".igfw.net",
".sex.com",
".hkreporter.com",
".peacehall.com",
".elastic.io",
".ncchinesenews.com",
".henhengan.com",
".fb.me",
".wretch.cc",
".hotfile.com",
".ironpython.net",
".free.fr",
".rudygems.com",
".filesonic.com",
".openhome.cc",
".rubyinstaller.org",
".idv.tw",
".isohunt.com",
".nabble.com",
".kanzhongguo.com",
".sytes.net",
".chinagfw.org",
".mediafire.com",
".openmymind.net",
".spinejs.com",
".speakerdeck.com",
".thechangelog.com",
".imgkeep.com",
".dabr.co.uk",
".voanews.com",
".voachineseblog.com",
".voa.mobi",
".bbc.in",
".bbcchinese.com",
".bbc.co.uk",
".chinainperspective.com",
".mingpao.com",
".wuala.com",
".boxun.com",
".dwnews.com",
".dw-world.com",
".dw-world.de",
".lijit.com",
".gravatar.com",
".viddler.com",
".chzbgr.com",
".cheezburger.com",
".news.pchome.com.tw",
".eddychan.com",
".9bis.net",
".9bis.com",
".libertytimes.com.tw",
".cornelcreanga.com",
".topsy.com",
".xys.org",
".golang.org",
".youtube.com",
".vimeo.com",
".blip.tv",
".twerpscan.com",
".edubridge.com",
".uncyclopedia.info",
".goodreads.com",
".disqus.com",
".marguerite.su",
".kenengba.com",
".lnkd.in",
".wmoov.com",
".9city.me",
".twitlonger.com",
".yegle.net",
".paper.li",
".biantailajiao.com",
".nodeknockout.com",
".igfw.tk",
".mitbbs.com",
".aculo.us",
".zeptojs.com",
".openvpn.net",
".4bsd.biz",
".tabsugar.com",
".bitly.com",
".addthiscdn.com",
".ggpht.com",
".tv.com",
".widgets.twimg.com",
".android-x86.org",
".rfa.org",
".cld.me",
".mashable.com",
".nextmedia.com",
".appleactionews.com",
".tumblr.com",
".mobileways.de",
".pixfs.net",
".pixnet.net",
".blip.tv",
".scribd.com",
".voanews.com",
".android.com",
".gstatic.com",
".chromium.org",
".t66y.com",
".letscorp.net",
".epfl.ch",
".snsanalytics.com",
".tweetmeme.com",
".smf.is",
".twitterfeed.com",
".r246.jp",
".wordpress.com",
".wp.com",
"p.twimg.com",
".rfi.fr",
".wezone.net",
".wikipedia.org",
".chinadigitaltimes.net",
".bit.ly",
".googleapis.com",
".google.com",
".analyticsrock.com",
".sns.mx",
".solidot.org.feedsportal.com",
".pocoo.org",
".linkedin.com",
".fnierdster.com",
".milewise.com",
".picplz.com",
"t.co",
".ytimg.com",
"google.com",
".googleusercontent.com",
".googlepages.com",
".googlevideo.com",
".googlecode.com",
".appspot.com",
".blogspot.com",
".google-analytics.com",
".rene-liu.com",
".4shared.com",
".twitter.com",
".twitpic.com",
".img.ly",
".j.mp",
".yfrog.com",
".fbcdn.net",
".feedburner.com",
".foursquare.com",
".bullogger.com",
".diigo.com",
".dropbox.com",
".ht.ly",
".hootsuite.com",
".imageshack.us",
".imdb.com",
".mail-archive.com",
".mobypicture.com",
".ow.ly",
".pastie.org",
".plixi.com",
".plurk.com",
".rapidshare.com",
".wp.me",
".nyti.ms",
".googlesyndication.com",
".page2rss.com",
".dhananjaynene.com",
".twbbs.org.tw",
".llvm.org",
".tweetdeck.com",
".thepiratebay.se",
".thepiratebay.org",
".apigee.com",
".cl.ly",
".guao.cc",
".vimeo.com",
".wdfiles.com",
".ohloh.net",
".googlelabs.com",
".creaders.net",
".pulse.yahoo.com",
".blogger.com",
".google.com.hk",
"go.redirectingat.com",
".faststone.org",
".the-big-bang-theory.com",
".echofon.com",
".goo.gl",
".hackerne.ws",
".friendfeed.com"
],
"keyword":[
"facebook",
"youtu.be",
"://goo.gl/fb/",
"python.org/download/"
]
},
{
"proxy":"edu",
"net":[
"202.114.0.0/255.255.0.0"
],
"domain":[
".embase.com",
"dx.doi.org",
".thescientificworld.co.uk",
".wiley.com",
".liebertonline.com",
".springerlink.com",
".aacrjournals.org",
".nature.com",
".redjournal.org",
".sciencedirect.com",
".metapress.com",
".sciencemag.org"
]
}
];
function dnsDomainIs(host, pattern) {
if (pattern.charCodeAt(0) === 46) { // pattern[0] === "."
return (host === pattern.slice(1) ||
(host.length >= pattern.length && host.substring(host.length - pattern.length) === pattern)); // original dnsDomainIs function
}
return (host === pattern);
}
function keywordMatch(url, pattern) {
return url.indexOf(pattern) >= 0;
}
function convertAddr(ipchars) {
var bytes = ipchars.split('.');
return ((bytes[0] & 0xff) << 24) |
((bytes[1] & 0xff) << 16) |
((bytes[2] & 0xff) << 8) |
(bytes[3] & 0xff);
}
function checkIp(ipaddr) {
var test = /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/.exec(ipaddr);
return !((test == null) || (test[1] > 255 || test[2] > 255 || test[3] > 255 || test[4] > 255));
}
function isInNet(ipaddr, pattern) {
if (checkIp(ipaddr)) {
var tmp = pattern.split("/");
if (tmp.length <= 2) {
pattern = tmp[0];
var maskstr;
if (checkIp(tmp[1])) {
maskstr = tmp[1];
}
else {
maskstr = "255.255.255.255";
}
if (checkIp(pattern)) {
var host = convertAddr(ipaddr);
var pat = convertAddr(pattern);
var mask = convertAddr(maskstr);
return ((host & mask) == (pat & mask));
}
}
}
return false;
}
function validatorBuilder(func, str) {
return function (pattern) {
return func(str, pattern);
};
}
function getDefault() {
return PROXY["sogou"];
}
function FindProxyForURL(url, host) {
var validators = {
"net":validatorBuilder(isInNet, host),
"domain":validatorBuilder(dnsDomainIs, host),
"keyword":validatorBuilder(keywordMatch, url)
};
var catLength = ALL.length;
var ruleType, rules, rulesLength, i;
for (var catId = 0; catId < catLength; catId++) {
var cat = ALL[catId];
for (ruleType in cat) {
if (ruleType !== "proxy" && cat.hasOwnProperty(ruleType) && validators.hasOwnProperty(ruleType)) {
rules = cat[ruleType];
rulesLength = rules.length;
for (i = 0; i < rulesLength; i++) {
if (!!((validators[ruleType])(rules[i])) && PROXY.hasOwnProperty(cat["proxy"])) {
return PROXY[cat["proxy"]];
}
}
}
}
}
return getDefault();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment