chinasites.go 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371
  1. // +build json
  2. package rules
  3. import (
  4. "encoding/json"
  5. "github.com/v2ray/v2ray-core/common/log"
  6. v2net "github.com/v2ray/v2ray-core/common/net"
  7. )
  8. type ChinaSitesCondition struct {
  9. }
  10. func (this *ChinaSitesCondition) Apply(dest v2net.Destination) bool {
  11. for _, cond := range chinaSitesConds {
  12. if cond.Apply(dest) {
  13. return true
  14. }
  15. }
  16. return false
  17. }
  18. func parseChinaSitesRule(data []byte) (*Rule, error) {
  19. rawRule := new(JsonRule)
  20. err := json.Unmarshal(data, rawRule)
  21. if err != nil {
  22. log.Error("Router: Invalid router rule: %v", err)
  23. return nil, err
  24. }
  25. return &Rule{
  26. Tag: rawRule.OutboundTag,
  27. Condition: &ChinaSitesCondition{},
  28. }, nil
  29. }
  30. const (
  31. anySubDomain = "^(.*\\.)?"
  32. dotAm = "\\.am$"
  33. dotCc = "\\.cc$"
  34. dotCn = "\\.cn$"
  35. dotCom = "\\.com$"
  36. dotIo = "\\.io$"
  37. dotLa = "\\.la$"
  38. dotMe = "\\.me$"
  39. dotNet = "\\.net$"
  40. dotOrg = "\\.org$"
  41. dotTv = "\\.tv$"
  42. )
  43. var (
  44. chinaSitesConds []Condition
  45. )
  46. func init() {
  47. regexpDomains := []string{
  48. dotCn,
  49. "\\.xn--fiqs8s$", /* .中国 */
  50. anySubDomain + "10010" + dotCom,
  51. anySubDomain + "115" + dotCom,
  52. anySubDomain + "123juzi" + dotCom,
  53. anySubDomain + "123juzi" + dotNet,
  54. anySubDomain + "123u" + dotCom,
  55. anySubDomain + "126" + dotCom,
  56. anySubDomain + "126" + dotNet,
  57. anySubDomain + "127" + dotNet,
  58. anySubDomain + "163" + dotCom,
  59. anySubDomain + "17173" + dotCom,
  60. anySubDomain + "17cdn" + dotCom,
  61. anySubDomain + "1905" + dotCom,
  62. anySubDomain + "21cn" + dotCom,
  63. anySubDomain + "2288" + dotOrg,
  64. anySubDomain + "2345" + dotCom,
  65. anySubDomain + "3322" + dotOrg,
  66. anySubDomain + "35" + dotCom,
  67. anySubDomain + "360doc" + dotCom,
  68. anySubDomain + "360buy" + dotCom,
  69. anySubDomain + "360buyimg" + dotCom,
  70. anySubDomain + "360safe" + dotCom,
  71. anySubDomain + "36kr" + dotCom,
  72. anySubDomain + "39" + dotNet,
  73. anySubDomain + "3dmgame" + dotCom,
  74. anySubDomain + "4399" + dotCom,
  75. anySubDomain + "50bang" + dotOrg,
  76. anySubDomain + "51" + dotLa,
  77. anySubDomain + "51cto" + dotCom,
  78. anySubDomain + "51job" + dotCom,
  79. anySubDomain + "51jobcdn" + dotCom,
  80. anySubDomain + "55bbs" + dotCom,
  81. anySubDomain + "58" + dotCom,
  82. anySubDomain + "71" + dotAm,
  83. anySubDomain + "7k7k" + dotCom,
  84. anySubDomain + "9718" + dotCom,
  85. anySubDomain + "abchina" + dotCom,
  86. anySubDomain + "acfun" + dotTv,
  87. anySubDomain + "aicdn" + dotCom,
  88. anySubDomain + "alibaba" + dotCom,
  89. anySubDomain + "alicdn" + dotCom,
  90. anySubDomain + "aliimg.com" + dotCom,
  91. anySubDomain + "alipay" + dotCom,
  92. anySubDomain + "alipayobjects" + dotCom,
  93. anySubDomain + "aliyun" + dotCom,
  94. anySubDomain + "aliyuncdn" + dotCom,
  95. anySubDomain + "aliyuncs" + dotCom,
  96. anySubDomain + "allyes" + dotCom,
  97. anySubDomain + "amap" + dotCom,
  98. anySubDomain + "anjuke" + dotCom,
  99. anySubDomain + "anquan" + dotOrg,
  100. anySubDomain + "appinn" + dotCom,
  101. anySubDomain + "babytree" + dotCom,
  102. anySubDomain + "baidu" + dotCom,
  103. anySubDomain + "baiducontent" + dotCom,
  104. anySubDomain + "baidustatic" + dotCom,
  105. anySubDomain + "baifendian" + dotCom,
  106. anySubDomain + "baifubao" + dotCom,
  107. anySubDomain + "baihe" + dotCom,
  108. anySubDomain + "baike" + dotCom,
  109. anySubDomain + "baixing" + dotCom,
  110. anySubDomain + "baixing" + dotNet,
  111. anySubDomain + "bankcomm" + dotCom,
  112. anySubDomain + "bankofchina" + dotCom,
  113. anySubDomain + "bcy" + dotNet,
  114. anySubDomain + "bdimg" + dotCom,
  115. anySubDomain + "bdstatic" + dotCom,
  116. anySubDomain + "bilibili" + dotCom,
  117. anySubDomain + "bitauto" + dotCom,
  118. anySubDomain + "bitautoimg" + dotCom,
  119. anySubDomain + "bobo" + dotCom,
  120. anySubDomain + "btcfans" + dotCom,
  121. anySubDomain + "ccb" + dotCom,
  122. anySubDomain + "cctv" + dotCom,
  123. anySubDomain + "cctvpic" + dotCom,
  124. anySubDomain + "cdn20" + dotCom,
  125. anySubDomain + "ch" + dotCom,
  126. anySubDomain + "che168" + dotCom,
  127. anySubDomain + "china" + dotCom,
  128. anySubDomain + "chinacache" + dotCom,
  129. anySubDomain + "chinacache" + dotNet,
  130. anySubDomain + "chinahr" + dotCom,
  131. anySubDomain + "chinamobile" + dotCom,
  132. anySubDomain + "chinaz" + dotCom,
  133. anySubDomain + "chouti" + dotCom,
  134. anySubDomain + "chuangxin" + dotCom,
  135. anySubDomain + "clouddn" + dotCom,
  136. anySubDomain + "cloudxns" + dotCom,
  137. anySubDomain + "cmbchina" + dotCom,
  138. anySubDomain + "cnbeta" + dotCom,
  139. anySubDomain + "cnbetacdn" + dotCom,
  140. anySubDomain + "cnblogs" + dotCom,
  141. anySubDomain + "cnepub" + dotCom,
  142. anySubDomain + "cnzz" + dotCom,
  143. anySubDomain + "coding" + dotNet,
  144. anySubDomain + "csbew" + dotCom,
  145. anySubDomain + "csdn" + dotNet,
  146. anySubDomain + "ctrip" + dotCom,
  147. anySubDomain + "cubead" + dotCom,
  148. anySubDomain + "dangdang" + dotCom,
  149. anySubDomain + "daocloud" + dotIo,
  150. anySubDomain + "dedecms" + dotCom,
  151. anySubDomain + "diandian" + dotCom,
  152. anySubDomain + "dianping" + dotCom,
  153. anySubDomain + "docin" + dotCom,
  154. anySubDomain + "donews" + dotCom,
  155. anySubDomain + "douban" + dotCom,
  156. anySubDomain + "doubanio" + dotCom,
  157. anySubDomain + "dpfile" + dotCom,
  158. anySubDomain + "duoshuo" + dotCom,
  159. anySubDomain + "duowan" + dotCom,
  160. anySubDomain + "eastday" + dotCom,
  161. anySubDomain + "ecitic" + dotCom,
  162. anySubDomain + "emarbox" + dotCom,
  163. anySubDomain + "etao" + dotCom,
  164. anySubDomain + "fanli" + dotCom,
  165. anySubDomain + "fengniao" + dotCom,
  166. anySubDomain + "fhldns" + dotCom,
  167. anySubDomain + "geekpark" + dotNet,
  168. anySubDomain + "getui" + dotCom,
  169. anySubDomain + "hao123" + dotCom,
  170. anySubDomain + "hao123img" + dotCom,
  171. anySubDomain + "haosou" + dotCom,
  172. anySubDomain + "hdslb" + dotCom,
  173. anySubDomain + "hexun" + dotCom,
  174. anySubDomain + "hichina" + dotCom,
  175. anySubDomain + "huanqiu" + dotCom,
  176. anySubDomain + "hunantv" + dotCom,
  177. anySubDomain + "huochepiao" + dotCom,
  178. anySubDomain + "hupu" + dotCom,
  179. anySubDomain + "huxiu" + dotCom,
  180. anySubDomain + "iask" + dotCom,
  181. anySubDomain + "iciba" + dotCom,
  182. anySubDomain + "idqqimg" + dotCom,
  183. anySubDomain + "ifanr" + dotCom,
  184. anySubDomain + "ijinshan" + dotCom,
  185. anySubDomain + "imedao" + dotCom,
  186. anySubDomain + "imgo" + dotTv,
  187. anySubDomain + "ipinyou" + dotCom,
  188. anySubDomain + "ipip" + dotNet,
  189. anySubDomain + "iqiyi" + dotCom,
  190. anySubDomain + "it168" + dotCom,
  191. anySubDomain + "itjuzi" + dotCom,
  192. anySubDomain + "jandan" + dotNet,
  193. anySubDomain + "jd" + dotCom,
  194. anySubDomain + "jb51" + dotCom,
  195. anySubDomain + "jia" + dotCom,
  196. anySubDomain + "jianshu" + dotCom,
  197. anySubDomain + "jiasuhui" + dotCom,
  198. anySubDomain + "jiayuan" + dotCom,
  199. anySubDomain + "jisuanke" + dotCom,
  200. anySubDomain + "jstv" + dotCom,
  201. anySubDomain + "jyimg" + dotCom,
  202. anySubDomain + "kaixin001" + dotCom,
  203. anySubDomain + "kanimg" + dotCom,
  204. anySubDomain + "kankanews" + dotCom,
  205. anySubDomain + "kf5" + dotCom,
  206. anySubDomain + "kimiss" + dotCom,
  207. anySubDomain + "kouclo" + dotCom,
  208. anySubDomain + "koudai8" + dotCom,
  209. anySubDomain + "ku6" + dotCom,
  210. anySubDomain + "ku6cdn" + dotCom,
  211. anySubDomain + "ku6img" + dotCom,
  212. anySubDomain + "lady8844" + dotCom,
  213. anySubDomain + "leiphone" + dotCom,
  214. anySubDomain + "leju" + dotCom,
  215. anySubDomain + "leturich" + dotOrg,
  216. anySubDomain + "letv" + dotCom,
  217. anySubDomain + "letvcdn" + dotCom,
  218. anySubDomain + "letvimg" + dotCom,
  219. anySubDomain + "lietou" + dotCom,
  220. anySubDomain + "linkvans" + dotCom,
  221. anySubDomain + "lightonus" + dotCom,
  222. anySubDomain + "lofter" + dotCom,
  223. anySubDomain + "lu" + dotCom,
  224. anySubDomain + "lufax" + dotCom,
  225. anySubDomain + "lufaxcdn" + dotCom,
  226. anySubDomain + "lvmama" + dotCom,
  227. anySubDomain + "lxdns" + dotCom,
  228. anySubDomain + "ly" + dotCom,
  229. anySubDomain + "mechina" + dotOrg,
  230. anySubDomain + "mediav" + dotCom,
  231. anySubDomain + "meika360" + dotCom,
  232. anySubDomain + "meilishuo" + dotCom,
  233. anySubDomain + "meishij" + dotNet,
  234. anySubDomain + "meituan" + dotCom,
  235. anySubDomain + "meizu" + dotCom,
  236. anySubDomain + "mgtv" + dotCom,
  237. anySubDomain + "mi" + dotCom,
  238. anySubDomain + "miaozhen" + dotCom,
  239. anySubDomain + "mmstat" + dotCom,
  240. anySubDomain + "mop" + dotCom,
  241. anySubDomain + "mydrivers" + dotCom,
  242. anySubDomain + "netease" + dotCom,
  243. anySubDomain + "ngacn" + dotCc,
  244. anySubDomain + "ntalker" + dotCom,
  245. anySubDomain + "oeeee" + dotCom,
  246. anySubDomain + "ol-img" + dotCom,
  247. anySubDomain + "onlinesjtu" + dotCom,
  248. anySubDomain + "oschina" + dotNet,
  249. anySubDomain + "paipai" + dotCom,
  250. anySubDomain + "pchome" + dotNet,
  251. anySubDomain + "pingan" + dotCom,
  252. anySubDomain + "pingplusplus" + dotCom,
  253. anySubDomain + "pps" + dotTv,
  254. anySubDomain + "pubyun" + dotCom,
  255. anySubDomain + "qbox" + dotMe,
  256. anySubDomain + "qhimg" + dotCom,
  257. anySubDomain + "qidian" + dotCom,
  258. anySubDomain + "qingcloud" + dotCom,
  259. anySubDomain + "qiniu" + dotCom,
  260. anySubDomain + "qiniudn" + dotCom,
  261. anySubDomain + "qiniudns" + dotCom,
  262. anySubDomain + "qiyi" + dotCom,
  263. anySubDomain + "qiyipic" + dotCom,
  264. anySubDomain + "qtmojo" + dotCom,
  265. anySubDomain + "qq" + dotCom,
  266. anySubDomain + "qqmail" + dotCom,
  267. anySubDomain + "qunar" + dotCom,
  268. anySubDomain + "qunarzz" + dotCom,
  269. anySubDomain + "qzone" + dotCom,
  270. anySubDomain + "renren" + dotCom,
  271. anySubDomain + "ruby-china" + dotOrg,
  272. anySubDomain + "sandai" + dotNet,
  273. anySubDomain + "sanguosha" + dotCom,
  274. anySubDomain + "sanwen" + dotNet,
  275. anySubDomain + "segmentfault" + dotCom,
  276. anySubDomain + "shutcm" + dotCom,
  277. anySubDomain + "sina" + dotCom,
  278. anySubDomain + "sinaapp" + dotCom,
  279. anySubDomain + "sinaedge" + dotCom,
  280. anySubDomain + "sinaimg" + dotCom,
  281. anySubDomain + "sinajs" + dotCom,
  282. anySubDomain + "szzfgjj" + dotCom,
  283. anySubDomain + "smzdm" + dotCom,
  284. anySubDomain + "sohu" + dotCom,
  285. anySubDomain + "sogou" + dotCom,
  286. anySubDomain + "soso" + dotCom,
  287. anySubDomain + "sspai" + dotCom,
  288. anySubDomain + "staticfile" + dotOrg,
  289. anySubDomain + "stockstar" + dotCom,
  290. anySubDomain + "suning" + dotCom,
  291. anySubDomain + "t1y5" + dotCom,
  292. anySubDomain + "tanx" + dotCom,
  293. anySubDomain + "tao123" + dotCom,
  294. anySubDomain + "taobao" + dotCom,
  295. anySubDomain + "taobaocdn" + dotCom,
  296. anySubDomain + "tencent" + dotCom,
  297. anySubDomain + "tenpay" + dotCom,
  298. anySubDomain + "tiexue" + dotNet,
  299. anySubDomain + "tmall" + dotCom,
  300. anySubDomain + "tmcdn" + dotNet,
  301. anySubDomain + "tudou" + dotCom,
  302. anySubDomain + "tudouui" + dotCom,
  303. anySubDomain + "tuicool" + dotCom,
  304. anySubDomain + "u17" + dotCom,
  305. anySubDomain + "unionpay" + dotCom,
  306. anySubDomain + "unionpaysecure" + dotCom,
  307. anySubDomain + "upyun" + dotCom,
  308. anySubDomain + "upaiyun" + dotCom,
  309. anySubDomain + "v2ex" + dotCom,
  310. anySubDomain + "vamaker" + dotCom,
  311. anySubDomain + "vancl" + dotCom,
  312. anySubDomain + "vip" + dotCom,
  313. anySubDomain + "wandoujia" + dotCom,
  314. anySubDomain + "wdjimg" + dotCom,
  315. anySubDomain + "webterren" + dotCom,
  316. anySubDomain + "weibo" + dotCom,
  317. anySubDomain + "weiyun" + dotCom,
  318. anySubDomain + "wonnder" + dotCom,
  319. anySubDomain + "wrating" + dotCom,
  320. anySubDomain + "wscdns" + dotCom,
  321. anySubDomain + "xiachufang" + dotCom,
  322. anySubDomain + "xiami" + dotCom,
  323. anySubDomain + "xiaomi" + dotCom,
  324. anySubDomain + "xinhuanet" + dotCom,
  325. anySubDomain + "xinshipu" + dotCom,
  326. anySubDomain + "xnpic" + dotCom,
  327. anySubDomain + "xueqiu" + dotCom,
  328. anySubDomain + "xunlei" + dotCom,
  329. anySubDomain + "xywy" + dotCom,
  330. anySubDomain + "yaolan" + dotCom,
  331. anySubDomain + "yccdn" + dotCom,
  332. anySubDomain + "yesky" + dotCom,
  333. anySubDomain + "yigao" + dotCom,
  334. anySubDomain + "yihaodian" + dotCom,
  335. anySubDomain + "yihaodianimg" + dotCom,
  336. anySubDomain + "yingjiesheng" + dotCom,
  337. anySubDomain + "yhd" + dotCom,
  338. anySubDomain + "youboy" + dotCom,
  339. anySubDomain + "youku" + dotCom,
  340. anySubDomain + "yunba" + dotIo,
  341. anySubDomain + "yunshipei" + dotCom,
  342. anySubDomain + "yupoo" + dotCom,
  343. anySubDomain + "yy" + dotCom,
  344. anySubDomain + "zastatic" + dotCom,
  345. anySubDomain + "zbjimg" + dotCom,
  346. anySubDomain + "zhenai" + dotCom,
  347. anySubDomain + "zhanqi" + dotTv,
  348. anySubDomain + "zhihu" + dotCom,
  349. anySubDomain + "zhimg" + dotCom,
  350. anySubDomain + "zjstv" + dotCom,
  351. anySubDomain + "zhubajie" + dotCom,
  352. }
  353. chinaSitesConds = make([]Condition, len(regexpDomains))
  354. for idx, pattern := range regexpDomains {
  355. matcher, err := NewRegexpDomainMatcher(pattern)
  356. if err != nil {
  357. panic(err)
  358. }
  359. chinaSitesConds[idx] = matcher
  360. }
  361. }