浏览器代理脚本
公司办公访问页面一般都需要通过代理端口,而不同也域名又有不同的访问策略。这时候一般要靠代理文件来控制,代理文件就是普通的js文件,除了预定义了接口方法没什么特别。
FindProxyForURL:代理入口文件
isInNet(ip,from,to,exclude): 判断ip是否在ip区间
shExpMatch(host,domain):判断域名是否匹配
一直用的是以前运维给到的proxy.pac。里面的结构比较混乱,重新梳理整理了份,把数据和逻辑分离了,方便维护。
/** * @author yinshen */ //入口方法 function FindProxyForURL(url, host){ var result; var ipValidate=/^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/ //是ip则用isInNet判断 if(ipValidate.test(host)){ var ip=host; //内网用本地路由 for(var direct in isInNetData.DIRECT){ if(_isInNet(ip,isInNetData.DIRECT[direct])){ return "DIRECT"; } } //idc机器走idc代理路由 for(var idcProxy in isInNetData.IDC_PROXY){ if(_isInNet(ip,isInNetData.IDC_PROXY[idcProxy])){ return idcProxy(); } } //外网路由 return "PROXY 172.23.28.199:8080; + PROXY 172.27.28.234:8080; + PROXY 10.133.0.241:8080"; }else{ for(var direct in shExpMatchData.DIRECT){ if(_shExpMatch(host,shExpMatchData.DIRECT[direct])){ return "DIRECT"; } } for(var idcProxy in shExpMatchData.IDC_PROXY){ if(_shExpMatch(host,shExpMatchData.IDC_PROXY[idcProxy])){ return idcProxy(); } } //管家下载补丁的特殊代理 if(shExpMatch(host,"tc.dlservice.microsoft.com")){ return "PROXY proxy.tencent.com:8080"; } //???为什么要特殊判断 for(var proxy in shExpMatchData.PROXY){ if(_shExpMatch(host,shExpMatchData.PROXY[proxy])){ return "PROXY 172.23.28.199:8080; + PROXY 172.27.28.234:8080; + PROXY 10.133.0.241:8080"; } } return "PROXY 172.23.28.199:8080; + PROXY 172.27.28.234:8080; + PROXY 10.133.0.241:8080"; } } //idc 2台机器分流代理 function idcProxy(){ if(Math.random()>0.5){ return "PROXY idc1-proxy.oa.com:80; + PROXY idc2-proxy.oa.com:80"; }else{ return "PROXY idc2-proxy.oa.com:80; + PROXY idc1-proxy.oa.com:80"; } } //判断域名是否在域名数组中 function _shExpMatch(host,domains){ for(var i in domains){ if(shExpMatch(host,domains[i])){ return true; } } return false; } //判断ip是否在网段数组中,网段包含from,to属性 function _isInNet(ip,targets){ for(var i in targets){ if(typeof(targets[i])=="string"){targets[i]={from:targets[i]};} if(isInNet(ip,targets[i].from,targets[i].to||"255.255.255.255")){ return true; } } return false; } //ip映射代理表 isInNetData={ DIRECT:{ QQIpDirect:[ "221.130.15.91", "221.130.15.25", "221.130.15.44", "221.130.15.46", "221.130.15.33", "221.130.15.93", "221.130.24.13", "221.130.15.172", "221.130.15.240" ], IDCIpProxy:[ {"from":"10.0.0.0","to":"255.128.0.0"}, {"from":"10.1.164.188"}, {"from":"10.128.35.184"}, {"from":"10.128.64.107"}, {"from":"10.128.64.108"}, {"from":"10.128.64.109"}, {"from":"10.128.65.175"}, {"from":"10.130.27.87"}, {"from":"10.130.64.219"}, {"from":"10.130.87.39"}, {"from":"10.130.91.36"}, {"from":"10.132.135.27"}, {"from":"10.134.145.12"}, {"from":"10.134.9.173"}, {"from":"10.134.9.175"}, {"from":"10.134.9.177"}, {"from":"10.135.0.212"}, {"from":"10.137.140.217"}, {"from":"10.147.22.158"}, {"from":"10.161.2.214"}, {"from":"10.6.207.197"}, {"from":"127.0.0.0","to":"255.255.255.0"}, {"from":"172.16.0.0","to":"255.255.240.0"}, {"from":"172.16.180.147"}, {"from":"172.16.180.43"}, {"from":"172.16.225.244"}, {"from":"172.16.244.254"}, {"from":"172.16.56.27"}, {"from":"172.16.56.27"}, {"from":"172.17.73.15"}, {"from":"172.17.73.16"}, {"from":"172.18.0.0","to":"255.255.0.0"}, {"from":"172.20.12.230"}, {"from":"172.20.6.57"}, {"from":"172.20.6.76"}, {"from":"172.20.6.94"}, {"from":"172.20.6.95"}, {"from":"172.22.10.0","to":"255.255.255.0"}, {"from":"172.22.10.177"}, {"from":"172.22.10.178"}, {"from":"172.22.10.181"}, {"from":"172.22.2.227"}, {"from":"172.23.1.149"}, {"from":"172.23.10.148"}, {"from":"172.23.32.11"}, {"from":"172.23.4.138"}, {"from":"172.25.0.0","to":"255.255.192.0"}, {"from":"172.25.40.73"}, {"from":"172.25.6.161"}, {"from":"172.27.5.51"}, {"from":"172.27.5.97"}, {"from":"172.27.6.51"}, {"from":"172.30.0.0","to":"255.255.0.0"}, {"from":"192.168.75.0","to":"255.255.255.0"} ], OADirect:[ {from:"10.0.0.0",to:"255.0.0.0"}, {from:"127.0.0.0",to:"255.255.255.0"}, {from:"172.0.0.0",to:"255.0.0.0"}, {from:"192.168.0.0",to:"255.255.0.0"} ] }, IDC_PROXY:{ IDCIpIDCProxy:[ {from:"10.0.0.0",to:"255.0.0.0"}, {from:"127.0.0.0",to:"255.255.255.0"}, {from:"172.16.0.0",to:"255.240.0.0"}, {from:"192.168.0.0",to:"255.255.0.0"} ] } } //域名映射代理表 shExpMatchData={ DIRECT:{ QQDomainDirect:[ "*.3366.com", "*.asanook.com", "*.duba.net", "*.fsanook.com", "*.gtimg.cn", "*.gtimg.com", "*.ibibo.com", "*.idqqimg.com", "*.iweibo2.com", "*.kitty.com", "*.kuyoo.cn", "*.paipai.com", "*.paipaiimg.com", "*.pc120.com", "*.pengyou.com", "*.qlogo.cn", "*.qpic.cn", "*.qplus.com", "*.qq.com", "*.qqgameapp.com", "*.qqgames.com", "*.qqmail.com", "*.qstatic.com", "*.qzone.com", "*.s1sf.com", "*.sanook.com", "*.soso.com", "*.taotao.com", "*.tencent.com", "*.tenpay.com", "*.tr.com", "*.vinagame.com.vn", "*.vng.com.vn", "*.zing.vn", "localhost", "qq.elong.com" ], IDCDomainDirect:[ "*.aastocks.com", "*.autoapp.webdev.com", "*.boss.com", "*.cmdb.isd.com", "*.fms.com", "*.houseapp.webdev.com", "*.itil.com", "*.matrix.cloud", "*.oa.com", "*.paipaioa.com", "*.snsad.isd.com", "*.snsdev.isd.com", "*.soc.com", "*.t.server.com", "*.taf.wsd.com", "*.test.addev.com", "*.url.cn", "*.webdev.com", "*.webdev.com", "acrm.addev.com", "adc_dev.webdev.com", "admin.move.com", "admin2.cf.com", "admintest.addev.com", "adtest.addev.com", "adwin.addev.com", "adwinapidemo.addev.com", "adwinmanagertest.addev.com", "arps-carlos.addev.com", "ars.isd.com", "att.isd.com", "auto.ied.com", "auto.webdev.com", "autoapp.qqinternal.com", "autoapp.webdev.com", "bbs.mqq.com", "blog.webdev.com", "bread.cm.com", "bread1.cm.com", "cc.ied.com", "cf-t.cm.com", "cf.cm.com", "chameleon.cm.com", "ci.isoso.com", "club-davy.cm.com", "club.cm.com", "csknow.cm.com", "datalib.qqinternal.com", "dist.3gqq.com", "faxin.oss.isoso.com", "gmtwo-tool.cm.com", "gopmp.cm.com", "hm.cm.com", "houseapp.webdev.com", "ied-ci", "ied-server2", "ieodcc.cm.com", "ijobs.ied.com", "img.3366img.com", "infomanager.3gqq.com", "itiltest.tr.com", "job.ied.com", "kbs.cm.com", "mgp.cm.com", "mobileadwinmgrtest.addev.com", "mobwin.addev.com", "mobwintest.addev.com", "mock.qqbuy.cm.com", "nlog.server.com", "oad.cm.com", "obpaipai.cm.com", "operation.cm.com", "opr.cm.com", "passport.webdev.com", "pet2admin214.cm.com", "pf.cm.com", "pub2.cf.com", "qb.oss.com", "qbadmin.cm.com", "qqbuy.cm.com", "qt.oss.com", "qzonevas.cm.com", "rmsci.isoso.com", "sam.cm.com", "scm.cm.com", "service.cm.com", "sh.cm.com", "shop.cm.com", "smp.cm.com", "snsad.isd.com", "snsdev.isd.com", "soc.cm.com", "sqqauth.mqq.com", "tcss.cm.com", "tejia.cm.com", "test.taf3.wsd.com", "test.tr.com", "test.webdev.com", "testacms.addev.com", "testadmin.addev.com", "testads.addev.com", "testarps.addev.com", "testcoral.addev.com", "testdb.isoso.com", "testv.cm.com", "testwiki.addev.com", "tiyan.ied.com", "tms.ied.com", "tracy59.addev.com", "trojanupload.tr.com", "union.oss.isoso.com", "union.oss.isoso.com", "url.cn", "v.cm.com", "video.cm.com", "webteam.isd.com", "www.3gqq.com", "www.m.com", "wx.cm.com", "xplat.cm.com" ] }, IDC_PROXY:{ IDCDomainIDCProxy:[ "*.3gqq.com", "*.ad.com", "*.addev.com", "*.aurora.com", "*.cdc.com", "*.cm.com", "*.datamine.com", "*.expochart.cn", "*.expovideo.cn", "*.great.com", "*.home.com", "*.hotbar.com", "*.ibg.com", "*.ied.com", "*.ierd.com", "*.imd.com", "*.imoss.com", "*.isd.com", "*.isoso.com", "*.m.com", "*.mqq.com", "*.oss.com", "*.otaworld.com", "*.paipaioa.com", "*.qqwork.com", "*.rtpre.com", "*.sc.oa.com", "*.sec.com", "*.tencentvoip.com", "*.vpn.com", "*.webdev.com", "*.webdev2.com", "*.wsd.com", "admin2.cf.com" ] }, PROXY:{ //公司soso部分cdn资源请求需要通过webproxy QQDomainByProxy:[ "2.y1y.net", "500wan.zone.tenpay.com", "air.tenpay.com", "bao.post.soso.com", "cache.post.soso.com", "cache.soso.com", "p1.qstatic.com", "p1.soso.com", "p2.qstatic.com", "p2.soso.com", "p3.qstatic.com", "p3.soso.com", "p4.qstatic.com", "p4.soso.com", "pic.baike.soso.com", "pic.wenwen.soso.com", "pic0.map.soso.com", "pic1.map.soso.com", "pic1.soso.com", "pic2.map.soso.com", "pic2.soso.com", "pic3.map.soso.com", "pic3.soso.com", "pic4.soso.com", "pic5.soso.com", "pic6.soso.com", "pic7.soso.com", "pic8.soso.com", "piccache1.soso.com", "piccache2.soso.com", "piccache3.soso.com", "piccache4.soso.com", "soso.qstatic.com" ], DomainHKProxy:["*.af.mil", "*.afp-direct.com", "*.afp.com", "*.amazon.com", "*.appspot.com", "*.badoo.com", "*.bild.t-online.de", "*.bizspring.net", "*.blizzard.com", "*.blogblog.com", "*.blogger.com", "*.blogspot.com", "*.bocionline.com", "*.booking.com", "*.boston.com", "*.bus.umich.edu", "*.careerbuilder.com", "*.castleagegame.com", "*.chromium.org", "*.cloudapp.net", "*.cloudfront.net", "*.cnbc.com", "*.cnn.com", "*.codeguru.com", "*.conferencing.com", "*.corriere.it", "*.corrieredellosport.it", "*.dice.com", "*.discuss.com.hk", "*.dropbox.com", "*.e.nikkei.com", "*.e3expo.com", "*.egotastic.com", "*.emarketer.com", "*.facebook.com", "*.facebook.net", "*.fbcdn.net", "*.feedburner.com", "*.fibaasia.net", "*.football.guardian.co.uk", "*.football365.com", "*.ft.com", "*.gailly.net", "*.gamebase.com.tw", "*.gamer.com.tw", "*.gazzetta.it", "*.gbc.tw", "*.glassdoor.com", "*.goldengame.com.tw", "*.google-analytics.com", "*.google.cn", "*.google.com", "*.google.com.cn", "*.google.com.hk", "*.googlecode.com", "*.googleusercontent.com", "*.gstatic.com", "*.guardian.co.uk", "*.hkjc.com", "*.home.skysports.com", "*.hootsuite.com", "*.hosted.ap.org", "*.hulu.com", "*.huluim.com", "*.i1.hk", "*.ibibo.com", "*.imdb.com", "*.insead.edu", "*.insidefacebook.com", "*.insidesocialgame.com", "*.kicker.de", "*.knorex.asia", "*.ku.edu", "*.lacitylimo.com", "*.lastampa.it", "*.libpng.org", "*.marca.com", "*.me2day.com", "*.milw0rm.com", "*.mitsloan.mit.edu", "*.mnet.com", "*.money.cnn.com", "*.mytour.com.hk", "*.nasa.gov", "*.nasdaq.com", "*.nate.com", "*.naver.com", "*.navy.mil", "*.newsweek.com", "*.nexon.com", "*.northwestern.edu", "*.paypal.com", "*.pixelinteractivemedia.com", "*.play168.com.tw", "*.playfish.com", "*.plurk.com", "*.ptt.cc", "*.rd.yahoo.com", "*.renaissancecapital.com", "*.reuters.com", "*.reuters.com", "*.rootkit.com", "*.scout.org.hk", "*.sixjoy.com", "*.sport.independent.co.uk", "*.sysinternals.com", "*.t.co", "*.thestar.com", "*.timesofindia.indiatimes.com", "*.tinychat.com", "*.tipo.gov.tw", "*.tmz.com", "*.twimg.com", "*.twitiq.com", "*.twitpic.com", "*.twitpic.com", "*.twitter.com", "*.udn.com", "*.unalis.com.tw", "*.verisign.com", "*.voanews.com", "*.want-daily.com", "*.wharton.upenn.edu", "*.wikimedia.org", "*.wikipedia.org", "*.windowslive.cn", "*.worldofwarcraft.co.kr", "*.wow-europe.com", "*.wowarmory.com", "*.wowtaiwan.com.tw", "*.wretch.cc", "*.xbox.com", "*.yam.com", "*.yfrog.com", "*.yiiframework.com", "*.ytimg.com", "*.zgncdn.com", "*.zlib.net", "*audioview.conferencing.com", "*udn.com", "appspot.com", "castleagegame.com", "chromium.org", "cloudapp.net", "cloudfront.net", "discuss.com.hk", "facebook.com", "facebook.net", "fibaasia.net", "google.cn", "google.com", "google.com.cn", "googlecode.com", "gstatic.com", "hkg1.aastocks.com", "hulu.com", "hulu.com", "i1.hk", "knorex.asia", "me2day.com", "mnet.com", "ping.fm", "t.co", "thestar.com", "tinychat.com", "twimg.com", "twitter.com", "voanews.com", "yfrog.com", "zlib.net" ] } };