浏览器代理脚本

公司办公访问页面一般都需要通过代理端口,而不同也域名又有不同的访问策略。这时候一般要靠代理文件来控制,代理文件就是普通的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"
        ]    
    }
};

 

 

posted on 2013-03-31 13:43  西瓜SY  阅读(1286)  评论(0编辑  收藏  举报