From 1e6aa73781b76ff6b79a9b236034770e5cd1ee4f Mon Sep 17 00:00:00 2001 From: v2ray Date: Mon, 14 Dec 2015 01:01:57 +0100 Subject: [PATCH] chinasites --- app/router/rules/json/chinasites.go | 193 +++++++++++++++++++++++ app/router/rules/json/chinasites_test.go | 25 +++ app/router/rules/json/router.go | 8 + release/config/vpoint_socks_vmess.json | 100 +----------- 4 files changed, 227 insertions(+), 99 deletions(-) create mode 100644 app/router/rules/json/chinasites.go create mode 100644 app/router/rules/json/chinasites_test.go diff --git a/app/router/rules/json/chinasites.go b/app/router/rules/json/chinasites.go new file mode 100644 index 00000000..e74203f3 --- /dev/null +++ b/app/router/rules/json/chinasites.go @@ -0,0 +1,193 @@ +package json + +import ( + "strings" + + v2net "github.com/v2ray/v2ray-core/common/net" +) + +type ChinaSitesRule struct { + Rule +} + +func (this *ChinaSitesRule) Apply(dest v2net.Destination) bool { + address := dest.Address() + if !address.IsDomain() { + return false + } + domain := strings.ToLower(address.Domain()) + for _, matcher := range compiledMatchers { + if matcher.Match(domain) { + return true + } + } + return false +} + +const ( + anySubDomain = "^(.*\\.)?" + dotAm = "\\.am$" + dotCc = "\\.cc$" + dotCn = "\\.cn$" + dotCom = "\\.com$" + dotLa = "\\.la$" + dotNet = "\\.net$" + dotOrg = "\\.org$" + dotTv = "\\.tv$" +) + +var ( + compiledMatchers = make([]*RegexpDomainMatcher, 0, 1024) + + regexpDomains = []string{ + dotCn, + + anySubDomain + "10010" + dotCom, + anySubDomain + "115" + dotCom, + anySubDomain + "123u" + dotCom, + anySubDomain + "126" + dotCom, + anySubDomain + "126" + dotNet, + anySubDomain + "163" + dotCom, + anySubDomain + "17173" + dotCom, + anySubDomain + "17cdn" + dotCom, + anySubDomain + "1905" + dotCom, + anySubDomain + "21cn" + dotCom, + anySubDomain + "2288" + dotOrg, + anySubDomain + "3322" + dotOrg, + anySubDomain + "360doc" + dotCom, + anySubDomain + "360buy" + dotCom, + anySubDomain + "360buyimg" + dotCom, + anySubDomain + "360safe" + dotCom, + anySubDomain + "39" + dotNet, + anySubDomain + "4399" + dotCom, + anySubDomain + "51" + dotLa, + anySubDomain + "51job" + dotCom, + anySubDomain + "51jobcdn" + dotCom, + anySubDomain + "71" + dotAm, + anySubDomain + "acfun" + dotTv, + anySubDomain + "aicdn" + dotCom, + anySubDomain + "alibaba" + dotCom, + anySubDomain + "alicdn" + dotCom, + anySubDomain + "aliimg.com" + dotCom, + anySubDomain + "alipay" + dotCom, + anySubDomain + "alipayobjects" + dotCom, + anySubDomain + "aliyun" + dotCom, + anySubDomain + "anjuke" + dotCom, + anySubDomain + "babytree" + dotCom, + anySubDomain + "baidu" + dotCom, + anySubDomain + "baiducontent" + dotCom, + anySubDomain + "baifendian" + dotCom, + anySubDomain + "baike" + dotCom, + anySubDomain + "baixing" + dotCom, + anySubDomain + "bdimg" + dotCom, + anySubDomain + "bdstatic" + dotCom, + anySubDomain + "bilibili" + dotCom, + anySubDomain + "bitauto" + dotCom, + anySubDomain + "ccb" + dotCom, + anySubDomain + "ch" + dotCom, + anySubDomain + "china" + dotCom, + anySubDomain + "chinacache" + dotCom, + anySubDomain + "chinacache" + dotNet, + anySubDomain + "chinamobile" + dotCom, + anySubDomain + "chinaz" + dotCom, + anySubDomain + "chuangxin" + dotCom, + anySubDomain + "clouddn" + dotCom, + anySubDomain + "cmbchina" + dotCom, + anySubDomain + "cnbeta" + dotCom, + anySubDomain + "cnbetacdn" + dotCom, + anySubDomain + "cnblogs" + dotCom, + anySubDomain + "cnepub" + dotCom, + anySubDomain + "cnzz" + dotCom, + anySubDomain + "csdn" + dotNet, + anySubDomain + "ctrip" + dotCom, + anySubDomain + "dangdang" + dotCom, + anySubDomain + "diandian" + dotCom, + anySubDomain + "dianping" + dotCom, + anySubDomain + "docin" + dotCom, + anySubDomain + "douban" + dotCom, + anySubDomain + "duowan" + dotCom, + anySubDomain + "eastday" + dotCom, + anySubDomain + "fanli" + dotCom, + anySubDomain + "fhldns" + dotCom, + anySubDomain + "hao123" + dotCom, + anySubDomain + "hao123img" + dotCom, + anySubDomain + "haosou" + dotCom, + anySubDomain + "hexun" + dotCom, + anySubDomain + "huanqiu" + dotCom, + anySubDomain + "hupu" + dotCom, + anySubDomain + "iask" + dotCom, + anySubDomain + "iqiyi" + dotCom, + anySubDomain + "jd" + dotCom, + anySubDomain + "jia" + dotCom, + anySubDomain + "kouclo" + dotCom, + anySubDomain + "ku6" + dotCom, + anySubDomain + "ku6cdn" + dotCom, + anySubDomain + "ku6img" + dotCom, + anySubDomain + "lady8844" + dotCom, + anySubDomain + "leiphone" + dotCom, + anySubDomain + "letv" + dotCom, + anySubDomain + "lvmama" + dotCom, + anySubDomain + "meika360" + dotCom, + anySubDomain + "meituan" + dotCom, + anySubDomain + "mi" + dotCom, + anySubDomain + "miaozhen" + dotCom, + anySubDomain + "ngacn" + dotCc, + anySubDomain + "oeeee" + dotCom, + anySubDomain + "oschina" + dotNet, + anySubDomain + "paipai" + dotCom, + anySubDomain + "pps" + dotTv, + anySubDomain + "qidian" + dotCom, + anySubDomain + "qiniu" + dotCom, + anySubDomain + "qiniudn" + dotCom, + anySubDomain + "qiniudns" + dotCom, + anySubDomain + "qiyi" + dotCom, + anySubDomain + "qiyipic" + dotCom, + anySubDomain + "qq" + dotCom, + anySubDomain + "qqmail" + dotCom, + anySubDomain + "qunar" + dotCom, + anySubDomain + "qzone" + dotCom, + anySubDomain + "renren" + dotCom, + anySubDomain + "smzdm" + dotCom, + anySubDomain + "sohu" + dotCom, + anySubDomain + "sogou" + dotCom, + anySubDomain + "soso" + dotCom, + anySubDomain + "stockstar" + dotCom, + anySubDomain + "suning" + dotCom, + anySubDomain + "tanx" + dotCom, + anySubDomain + "tao123" + dotCom, + anySubDomain + "taobao" + dotCom, + anySubDomain + "taobaocdn" + dotCom, + anySubDomain + "tencent" + dotCom, + anySubDomain + "tenpay" + dotCom, + anySubDomain + "tmall" + dotCom, + anySubDomain + "tudou" + dotCom, + anySubDomain + "unionpay" + dotCom, + anySubDomain + "unionpaysecure" + dotCom, + anySubDomain + "upyun" + dotCom, + anySubDomain + "upaiyun" + dotCom, + anySubDomain + "vip" + dotCom, + anySubDomain + "weibo" + dotCom, + anySubDomain + "weiyun" + dotCom, + anySubDomain + "xiami" + dotCom, + anySubDomain + "xinhuanet" + dotCom, + anySubDomain + "xueqiu" + dotCom, + anySubDomain + "xunlei" + dotCom, + anySubDomain + "xywy" + dotCom, + anySubDomain + "yaolan" + dotCom, + anySubDomain + "yingjiesheng" + dotCom, + anySubDomain + "yhd" + dotCom, + anySubDomain + "youboy" + dotCom, + anySubDomain + "youku" + dotCom, + anySubDomain + "zhihu" + dotCom, + } +) + +func init() { + for _, pattern := range regexpDomains { + matcher, err := NewRegexpDomainMatcher(pattern) + if err != nil { + panic(err) + } + compiledMatchers = append(compiledMatchers, matcher) + } +} diff --git a/app/router/rules/json/chinasites_test.go b/app/router/rules/json/chinasites_test.go new file mode 100644 index 00000000..ae83b4b8 --- /dev/null +++ b/app/router/rules/json/chinasites_test.go @@ -0,0 +1,25 @@ +package json + +import ( + "testing" + + v2net "github.com/v2ray/v2ray-core/common/net" + v2testing "github.com/v2ray/v2ray-core/testing" + "github.com/v2ray/v2ray-core/testing/assert" +) + +func makeDomainDestination(domain string) v2net.Destination { + return v2net.NewTCPDestination(v2net.DomainAddress(domain, 80)) +} + +func TestChinaSites(t *testing.T) { + v2testing.Current(t) + + rule := &ChinaSitesRule{} + assert.Bool(rule.Apply(makeDomainDestination("v.qq.com"))).IsTrue() + assert.Bool(rule.Apply(makeDomainDestination("www.163.com"))).IsTrue() + assert.Bool(rule.Apply(makeDomainDestination("ngacn.cc"))).IsTrue() + assert.Bool(rule.Apply(makeDomainDestination("12306.cn"))).IsTrue() + + assert.Bool(rule.Apply(makeDomainDestination("v2ray.com"))).IsFalse() +} diff --git a/app/router/rules/json/router.go b/app/router/rules/json/router.go index d461255f..45809edc 100644 --- a/app/router/rules/json/router.go +++ b/app/router/rules/json/router.go @@ -36,6 +36,14 @@ func parseRule(msg json.RawMessage) rules.Rule { } return chinaiprule } + if rule.Type == "chinasites" { + chinasitesrule := new(ChinaSitesRule) + if err := json.Unmarshal(msg, chinasitesrule); err != nil { + log.Error("Invalid chinasites rule: %v", err) + return nil + } + return chinasitesrule + } log.Error("Unknown router rule type: %s", rule.Type) return nil } diff --git a/release/config/vpoint_socks_vmess.json b/release/config/vpoint_socks_vmess.json index 5b6c112b..d082548e 100644 --- a/release/config/vpoint_socks_vmess.json +++ b/release/config/vpoint_socks_vmess.json @@ -1036,105 +1036,7 @@ "settings": { "rules": [ { - "type": "field", - "domain": [ - "regexp:.cn$", - "baidu.com", - "baiducontent.com", - "regexp:qq.com$", - "taobao.com", - "weibo.com", - "tao123.com", - "tmall.com", - "sohu.com", - "xinhuanet.com", - "soso.com", - "jd.com", - "cntv.cn", - "163.com", - "sogou.com", - "china.com", - "youku.com", - "alipay.com", - "cnzz.com", - "tudou.com", - "douban.com", - "zhihu.com", - "babytree.com", - "51.la", - "smzdm.com", - "bilibili.com", - "bitauto.com", - "39.net", - "xywy.com", - "huanqiu.com", - "21cn.com", - "1905.com", - "qiyi.com", - "kouclo.com", - "alibaba.com", - "haosou.com", - "yaolan.com", - "lady8844.com", - "baike.com", - "eastday.com", - "hupu.com", - "csdn.net", - "youboy.com", - "chinaz.com", - "cnbeta.com", - "suning.com", - "stockstar.com", - "xunlei.com", - "oeeee.com", - "qunar.com", - "fanli.com", - "acfun.tv", - "dianping.com", - "126.com", - "aliyun.com", - "xiami.com", - "mi.com", - "dangdang.com", - "yhd.com", - "jia.com", - "qidian.com", - "ccb.com", - "anjuke.com", - "ngacn.cc", - "hexun.com", - "ctrip.com", - "17173.com", - "oschina.net", - "docin.com", - "renren.com", - "duowan.com", - "vip.com", - "meituan.com", - "360doc.com", - "xueqiu.com", - "cmbchina.com", - "pps.tv", - "regex:\\.?ch.com", - "lvmama.com", - "clouddn.com", - "leiphone.com", - "alicdn.com", - ".71.am", - ".miaozhen.com", - "meika360.com", - "qiyipic.com", - "baifendian.com", - "qiniudn.com", - "qiniudns.com", - "clouddn.com", - "tencent.com", - "qqmail.com", - "qzone.com", - "soso.com", - "paipai.com", - "tenpay.com" - ], + "type": "chinasites", "outboundTag": "direct" }, {