mirror of https://github.com/v2ray/v2ray-core
chinasites
parent
09f7233e9d
commit
1e6aa73781
|
@ -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)
|
||||||
|
}
|
||||||
|
}
|
|
@ -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()
|
||||||
|
}
|
|
@ -36,6 +36,14 @@ func parseRule(msg json.RawMessage) rules.Rule {
|
||||||
}
|
}
|
||||||
return chinaiprule
|
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)
|
log.Error("Unknown router rule type: %s", rule.Type)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -1036,105 +1036,7 @@
|
||||||
"settings": {
|
"settings": {
|
||||||
"rules": [
|
"rules": [
|
||||||
{
|
{
|
||||||
"type": "field",
|
"type": "chinasites",
|
||||||
"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"
|
|
||||||
],
|
|
||||||
"outboundTag": "direct"
|
"outboundTag": "direct"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue