|
|
@@ -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)
|
|
|
+ }
|
|
|
+}
|