mirror of
https://github.com/v2fly/domain-list-community.git
synced 2026-03-29 14:56:12 +07:00
Compare commits
45 Commits
2026030703
...
2026032505
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1e9bab323b | ||
|
|
e56bbf01fa | ||
|
|
af25bbc8a5 | ||
|
|
5de9d7cc94 | ||
|
|
dcfbdb7255 | ||
|
|
749bcd62aa | ||
|
|
aa76e186cb | ||
|
|
c9348f1db4 | ||
|
|
d62599c8db | ||
|
|
fab6275217 | ||
|
|
4c7afec5a9 | ||
|
|
330c30eb23 | ||
|
|
f34f22819e | ||
|
|
baa1409cfb | ||
|
|
a22d247c5a | ||
|
|
d311bbe50b | ||
|
|
1db558b165 | ||
|
|
9ee0757263 | ||
|
|
714a061ba3 | ||
|
|
5ff8142411 | ||
|
|
becbd7a8ad | ||
|
|
cd2d66eb72 | ||
|
|
4c4ad053ef | ||
|
|
6544f6d3a6 | ||
|
|
673a70c380 | ||
|
|
be078767c4 | ||
|
|
15fde0da4b | ||
|
|
5dd4779425 | ||
|
|
eeccde7239 | ||
|
|
235988ffe4 | ||
|
|
a45bf04e9b | ||
|
|
f31764e263 | ||
|
|
540b28d5e4 | ||
|
|
9c06656430 | ||
|
|
f524c3b6bf | ||
|
|
3cdb699cac | ||
|
|
6bb4a68f2f | ||
|
|
0d1c2bc257 | ||
|
|
8a08dcc7ed | ||
|
|
61fd24725c | ||
|
|
7e797d86ec | ||
|
|
910b069cc0 | ||
|
|
92f9940fb7 | ||
|
|
08bafd1b33 | ||
|
|
873495a1fd |
6
.gitignore
vendored
6
.gitignore
vendored
@@ -4,9 +4,9 @@
|
|||||||
/domain-list-community
|
/domain-list-community
|
||||||
/domain-list-community.exe
|
/domain-list-community.exe
|
||||||
|
|
||||||
# Generated dat file.
|
# Generated dat files.
|
||||||
dlc.dat
|
/*.dat
|
||||||
|
|
||||||
# Exported plaintext lists.
|
# Exported plaintext lists.
|
||||||
/*.yml
|
|
||||||
/*.txt
|
/*.txt
|
||||||
|
/*.yml
|
||||||
|
|||||||
@@ -86,6 +86,8 @@ Each file in the `data` directory can be used as a rule in this format: `geosite
|
|||||||
|
|
||||||
Run `go run ./ --help` for more usage information.
|
Run `go run ./ --help` for more usage information.
|
||||||
|
|
||||||
|
For anyone who wants to generate custom `.dat` files, you may read [#3370](https://github.com/v2fly/domain-list-community/discussions/3370).
|
||||||
|
|
||||||
## Structure of data
|
## Structure of data
|
||||||
|
|
||||||
All data are under `data` directory. Each file in the directory represents a sub-list of domains, named by the file name. File content is in the following format.
|
All data are under `data` directory. Each file in the directory represents a sub-list of domains, named by the file name. File content is in the following format.
|
||||||
@@ -105,7 +107,7 @@ regexp:^odd[1-7]\.example\.org(\.[a-z]{2})?$
|
|||||||
> Adding new `regexp` and `keyword` rules is discouraged because it is easy to use them incorrectly, and proxy software cannot efficiently match these types of rules.
|
> Adding new `regexp` and `keyword` rules is discouraged because it is easy to use them incorrectly, and proxy software cannot efficiently match these types of rules.
|
||||||
|
|
||||||
> [!NOTE]
|
> [!NOTE]
|
||||||
> The following types of rules are **NOT** fully compatible with the ones that defined by user in V2Ray config file. Do **Not** copy and paste directly.
|
> The following types of rules are **NOT** fully compatible with the ones that defined by user in V2Ray config file. Do **NOT** copy and paste directly.
|
||||||
|
|
||||||
- Comment begins with `#`. It may begin anywhere in the file. The content in the line after `#` is treated as comment and ignored in production.
|
- Comment begins with `#`. It may begin anywhere in the file. The content in the line after `#` is treated as comment and ignored in production.
|
||||||
- Subdomain begins with `domain:`, followed by a valid domain name. The prefix `domain:` may be omitted.
|
- Subdomain begins with `domain:`, followed by a valid domain name. The prefix `domain:` may be omitted.
|
||||||
@@ -114,7 +116,7 @@ regexp:^odd[1-7]\.example\.org(\.[a-z]{2})?$
|
|||||||
- Regular expression begins with `regexp:`, followed by a valid regular expression (per Golang's standard).
|
- Regular expression begins with `regexp:`, followed by a valid regular expression (per Golang's standard).
|
||||||
- Domain rules (including `domain`, `full`, `keyword`, and `regexp`) may have none, one or more attributes. Each attribute begins with `@` and followed by the name of the attribute. Attributes will remain available in final lists and `dlc.dat`.
|
- Domain rules (including `domain`, `full`, `keyword`, and `regexp`) may have none, one or more attributes. Each attribute begins with `@` and followed by the name of the attribute. Attributes will remain available in final lists and `dlc.dat`.
|
||||||
- Domain rules may have none, one or more affiliations, which additionally adds the domain rule into the affiliated target list. Each affiliation begins with `&` and followed by the name of the target list (nomatter whether the target has a dedicated file in data path). This is a method for data management, and will not remain in the final lists or `dlc.dat`.
|
- Domain rules may have none, one or more affiliations, which additionally adds the domain rule into the affiliated target list. Each affiliation begins with `&` and followed by the name of the target list (nomatter whether the target has a dedicated file in data path). This is a method for data management, and will not remain in the final lists or `dlc.dat`.
|
||||||
- Inclusion begins with `include:`, followed by the name of another valid domain list. A simple `include:listb` in file `lista` means adding all domain rules of `listb` into `lista`. Inclusions with attributes stands for selective inclusion. `include:listb @attr1 @-attr2` means only adding those domain rules *with* `@attr1` **and** *without* `@attr2`. This is a special type for data management, and will not remain in the final lists or `dlc.dat`.
|
- Inclusion begins with `include:`, followed by the name of another valid domain list. `include:listb` in file `lista` means adding all domain rules of `listb` into `lista`. Inclusions with attributes stand for selective inclusion. `include:listb @attr1 @-attr2` means only adding those domain rules *with* `@attr1` **and** *without* `@attr2`. This is a special type for data management, and will not remain in the final lists or `dlc.dat`.
|
||||||
|
|
||||||
## How it works
|
## How it works
|
||||||
|
|
||||||
|
|||||||
@@ -23,7 +23,6 @@ include:uc
|
|||||||
include:umeng
|
include:umeng
|
||||||
include:youku
|
include:youku
|
||||||
|
|
||||||
25pp.com
|
|
||||||
56che.com
|
56che.com
|
||||||
95095.com
|
95095.com
|
||||||
ali-health.com
|
ali-health.com
|
||||||
@@ -114,7 +113,6 @@ sparenode.com
|
|||||||
supet.com
|
supet.com
|
||||||
tanx.com
|
tanx.com
|
||||||
ttpod.com
|
ttpod.com
|
||||||
wandoujia.com
|
|
||||||
xin.xin
|
xin.xin
|
||||||
xinlingshou.cn
|
xinlingshou.cn
|
||||||
yowhale.com
|
yowhale.com
|
||||||
@@ -204,6 +202,13 @@ xiami.net
|
|||||||
# 口碑
|
# 口碑
|
||||||
koubei.com
|
koubei.com
|
||||||
|
|
||||||
|
# 豌豆荚
|
||||||
|
wandoujia.com
|
||||||
|
wdjimg.com
|
||||||
|
|
||||||
|
# PP助手
|
||||||
|
25pp.com
|
||||||
|
|
||||||
# 吱声网
|
# 吱声网
|
||||||
zhisheng.com
|
zhisheng.com
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,8 @@
|
|||||||
|
annas-archive.gd
|
||||||
|
annas-archive.gl
|
||||||
annas-archive.in
|
annas-archive.in
|
||||||
annas-archive.li
|
annas-archive.li
|
||||||
annas-archive.org
|
annas-archive.org
|
||||||
|
annas-archive.pk
|
||||||
annas-archive.pm
|
annas-archive.pm
|
||||||
annas-archive.se
|
annas-archive.se
|
||||||
|
|||||||
@@ -1,8 +1,9 @@
|
|||||||
anthropic.com
|
anthropic.com
|
||||||
|
clau.de
|
||||||
claude.ai
|
claude.ai
|
||||||
claude.com
|
claude.com
|
||||||
claudeusercontent.com
|
|
||||||
claudemcpclient.com
|
claudemcpclient.com
|
||||||
|
claudeusercontent.com
|
||||||
|
|
||||||
# CDN
|
# CDN
|
||||||
full:servd-anthropic-website.b-cdn.net
|
full:servd-anthropic-website.b-cdn.net
|
||||||
|
|||||||
@@ -64,6 +64,7 @@ shifen.com
|
|||||||
smartapps.cn
|
smartapps.cn
|
||||||
tieba.com
|
tieba.com
|
||||||
tiebaimg.com
|
tiebaimg.com
|
||||||
|
xdrtc.com
|
||||||
xianfae.com
|
xianfae.com
|
||||||
xiaodutv.com
|
xiaodutv.com
|
||||||
yoojia.com
|
yoojia.com
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
# Game
|
# Game
|
||||||
|
bestdori.com
|
||||||
colorfulstage.com
|
colorfulstage.com
|
||||||
|
|
||||||
# Idol
|
# Idol
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ clipdrop.co
|
|||||||
jasper.ai
|
jasper.ai
|
||||||
|
|
||||||
chutes.ai
|
chutes.ai
|
||||||
|
clawhub.ai
|
||||||
copilot.microsoft.com
|
copilot.microsoft.com
|
||||||
devin.ai
|
devin.ai
|
||||||
diabrowser.com
|
diabrowser.com
|
||||||
@@ -37,9 +38,12 @@ diabrowser.engineering
|
|||||||
dify.ai
|
dify.ai
|
||||||
duck.ai
|
duck.ai
|
||||||
gateway.ai.cloudflare.com
|
gateway.ai.cloudflare.com
|
||||||
|
h2o.ai
|
||||||
kiro.dev
|
kiro.dev
|
||||||
lovart.ai
|
lovart.ai
|
||||||
meta.ai
|
meta.ai
|
||||||
mistral.ai
|
mistral.ai
|
||||||
openart.ai
|
openart.ai
|
||||||
|
openclaw.ai
|
||||||
openrouter.ai
|
openrouter.ai
|
||||||
|
spicywriter.com
|
||||||
|
|||||||
@@ -70,3 +70,9 @@ faxingbao.com
|
|||||||
meta.law
|
meta.law
|
||||||
metaso.cn
|
metaso.cn
|
||||||
xiezuocat.com
|
xiezuocat.com
|
||||||
|
|
||||||
|
# DUI/思必驰
|
||||||
|
aispeech.com
|
||||||
|
dui.ai
|
||||||
|
duiopen.com
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ include:cdn77
|
|||||||
include:cloudflare
|
include:cloudflare
|
||||||
include:fastly
|
include:fastly
|
||||||
include:imgix
|
include:imgix
|
||||||
|
include:jsdelivr
|
||||||
include:limelight
|
include:limelight
|
||||||
include:pagecdn
|
include:pagecdn
|
||||||
include:quantil
|
include:quantil
|
||||||
@@ -13,3 +14,6 @@ include:vrcdn
|
|||||||
b-cdn.net
|
b-cdn.net
|
||||||
bunny.net
|
bunny.net
|
||||||
bunnycdn.com
|
bunnycdn.com
|
||||||
|
|
||||||
|
# cdnjs
|
||||||
|
cdnjs.com
|
||||||
|
|||||||
@@ -33,22 +33,17 @@ include:java
|
|||||||
include:jetbrains
|
include:jetbrains
|
||||||
include:jetbrains-ai
|
include:jetbrains-ai
|
||||||
include:jfrog
|
include:jfrog
|
||||||
include:jsdelivr
|
|
||||||
include:kubernetes
|
include:kubernetes
|
||||||
include:microsoft-dev
|
include:microsoft-dev
|
||||||
include:mongodb
|
include:mongodb
|
||||||
include:nginx
|
include:nginx
|
||||||
include:nixos
|
|
||||||
include:openwrt
|
include:openwrt
|
||||||
include:osdn
|
|
||||||
include:perl
|
include:perl
|
||||||
include:polymer
|
include:polymer
|
||||||
include:python
|
include:python
|
||||||
include:python-community
|
|
||||||
include:qt
|
include:qt
|
||||||
include:readthedocs
|
include:readthedocs
|
||||||
include:redis
|
include:redis
|
||||||
include:remirepo
|
|
||||||
include:ruby
|
include:ruby
|
||||||
include:rust
|
include:rust
|
||||||
include:redhat
|
include:redhat
|
||||||
@@ -59,10 +54,9 @@ include:stackexchange
|
|||||||
include:strikingly
|
include:strikingly
|
||||||
include:termux
|
include:termux
|
||||||
include:thelinuxfoundation
|
include:thelinuxfoundation
|
||||||
include:topcoder
|
include:tilda
|
||||||
include:unity
|
include:unity
|
||||||
include:v8
|
include:v8
|
||||||
include:vim
|
|
||||||
|
|
||||||
adventofcode.com
|
adventofcode.com
|
||||||
alpinelinux.org
|
alpinelinux.org
|
||||||
@@ -71,11 +65,11 @@ artixlinux.org
|
|||||||
atom.io
|
atom.io
|
||||||
badgen.net
|
badgen.net
|
||||||
bitvise.com
|
bitvise.com
|
||||||
cdnjs.com
|
|
||||||
centos.org
|
centos.org
|
||||||
chocolatey.org
|
chocolatey.org
|
||||||
clojure.org
|
clojure.org
|
||||||
cnpmjs.org
|
cnpmjs.org
|
||||||
|
cve.org
|
||||||
cygwin.com
|
cygwin.com
|
||||||
cython.org
|
cython.org
|
||||||
deno.com
|
deno.com
|
||||||
@@ -123,17 +117,20 @@ notepad-plus-plus.org
|
|||||||
openresty.org
|
openresty.org
|
||||||
openssl.org
|
openssl.org
|
||||||
opensuse.org
|
opensuse.org
|
||||||
|
osdn.net
|
||||||
packagecloud.io
|
packagecloud.io
|
||||||
packagist.org
|
packagist.org
|
||||||
pcre.org
|
pcre.org
|
||||||
phantomjs.org
|
phantomjs.org
|
||||||
php.net
|
php.net
|
||||||
|
piwheels.org
|
||||||
postgresql.org
|
postgresql.org
|
||||||
putty.org
|
putty.org
|
||||||
r-project.org
|
r-project.org
|
||||||
raspberrypi.org
|
raspberrypi.org
|
||||||
raspbian.org
|
raspbian.org
|
||||||
regex101.com
|
regex101.com
|
||||||
|
remirepo.net
|
||||||
rpmfusion.org
|
rpmfusion.org
|
||||||
scientificlinux.org
|
scientificlinux.org
|
||||||
scoop.sh
|
scoop.sh
|
||||||
@@ -143,9 +140,11 @@ sqlite.org
|
|||||||
sublimetext.com
|
sublimetext.com
|
||||||
tampermonkey.net
|
tampermonkey.net
|
||||||
termius.com
|
termius.com
|
||||||
|
topcoder.com
|
||||||
unpkg.com
|
unpkg.com
|
||||||
videojs.com
|
videojs.com
|
||||||
videolan.org
|
videolan.org
|
||||||
|
vim.org
|
||||||
wapm.io
|
wapm.io
|
||||||
wasmer.io
|
wasmer.io
|
||||||
webflow.com
|
webflow.com
|
||||||
@@ -154,4 +153,5 @@ wireshark.org
|
|||||||
x.org
|
x.org
|
||||||
xposed.info
|
xposed.info
|
||||||
yarnpkg.com
|
yarnpkg.com
|
||||||
|
ziglang.org
|
||||||
zsh.org
|
zsh.org
|
||||||
|
|||||||
@@ -25,3 +25,4 @@ jinrishici.com
|
|||||||
openvela.com
|
openvela.com
|
||||||
pingcode.com
|
pingcode.com
|
||||||
tipdm.org
|
tipdm.org
|
||||||
|
zuidaima.com
|
||||||
|
|||||||
@@ -1,2 +1,14 @@
|
|||||||
include:doc88
|
1ppt.com
|
||||||
include:docin
|
360doc.com
|
||||||
|
51wendang.com
|
||||||
|
52ppt.com
|
||||||
|
badou.com
|
||||||
|
book118.com
|
||||||
|
doc88.com
|
||||||
|
docin.com
|
||||||
|
douding.cn
|
||||||
|
haohaodoc.com
|
||||||
|
lazyer.net
|
||||||
|
renrendoc.com
|
||||||
|
wenkeju.com
|
||||||
|
ypppt.com
|
||||||
|
|||||||
@@ -10,6 +10,8 @@ include:shanbay
|
|||||||
include:xueersi
|
include:xueersi
|
||||||
include:yuanfudao
|
include:yuanfudao
|
||||||
|
|
||||||
|
edu.cn
|
||||||
|
|
||||||
# 雨课堂
|
# 雨课堂
|
||||||
include:yuketang
|
include:yuketang
|
||||||
## 雨豆课堂
|
## 雨豆课堂
|
||||||
@@ -19,8 +21,6 @@ yushiyan.net
|
|||||||
## 学堂在线
|
## 学堂在线
|
||||||
xuetangx.com
|
xuetangx.com
|
||||||
|
|
||||||
edu.cn
|
|
||||||
|
|
||||||
# 国家智慧教育公共服务平台
|
# 国家智慧教育公共服务平台
|
||||||
cbern.com.cn
|
cbern.com.cn
|
||||||
smartedu.cn
|
smartedu.cn
|
||||||
@@ -91,6 +91,7 @@ eoffcn.com
|
|||||||
jinrongren.net
|
jinrongren.net
|
||||||
offcn.com
|
offcn.com
|
||||||
zggqzp.com
|
zggqzp.com
|
||||||
|
zgjsks.com
|
||||||
zgsydw.com
|
zgsydw.com
|
||||||
# 高考100
|
# 高考100
|
||||||
gk100.com
|
gk100.com
|
||||||
@@ -105,6 +106,9 @@ xir.cn
|
|||||||
# 日语测试
|
# 日语测试
|
||||||
j-test.com
|
j-test.com
|
||||||
nattest-china.com
|
nattest-china.com
|
||||||
|
# 菁优网
|
||||||
|
jyeoo.com
|
||||||
|
jyeoo.net
|
||||||
# 课播云校
|
# 课播云校
|
||||||
keboyunxiao.com
|
keboyunxiao.com
|
||||||
# 课堂派
|
# 课堂派
|
||||||
@@ -118,6 +122,11 @@ llscdn.com
|
|||||||
llsserver.com
|
llsserver.com
|
||||||
# 马哥教育
|
# 马哥教育
|
||||||
magedu.com
|
magedu.com
|
||||||
|
# 墨墨背单词
|
||||||
|
maimemo.com
|
||||||
|
maimemostatus.com
|
||||||
|
# 墨墨记忆卡
|
||||||
|
markji.com
|
||||||
# CIS NanoMasters
|
# CIS NanoMasters
|
||||||
neoscholar.com
|
neoscholar.com
|
||||||
neoschool.com
|
neoschool.com
|
||||||
@@ -127,6 +136,8 @@ oldboyedu.com
|
|||||||
pigai.org
|
pigai.org
|
||||||
# 公考知识库
|
# 公考知识库
|
||||||
saduck.top
|
saduck.top
|
||||||
|
# 外研在线
|
||||||
|
unipus.cn
|
||||||
# 未来云校
|
# 未来云校
|
||||||
weilaiyunxiao.com
|
weilaiyunxiao.com
|
||||||
# 北京嘉瑞新创教育咨询有限公司
|
# 北京嘉瑞新创教育咨询有限公司
|
||||||
|
|||||||
@@ -17,11 +17,10 @@ bouffalolab.com
|
|||||||
cxmt.com
|
cxmt.com
|
||||||
|
|
||||||
# 乐鑫信息科技
|
# 乐鑫信息科技
|
||||||
|
#include:espressif
|
||||||
esp8266.cn
|
esp8266.cn
|
||||||
esp8266.com
|
|
||||||
esp8266.com.cn
|
esp8266.com.cn
|
||||||
espressif.cn
|
espressif.cn
|
||||||
espressif.com
|
|
||||||
espressif.com.cn
|
espressif.com.cn
|
||||||
|
|
||||||
# 华秋电子
|
# 华秋电子
|
||||||
|
|||||||
@@ -49,6 +49,7 @@ include:netflix
|
|||||||
include:niconico
|
include:niconico
|
||||||
include:now
|
include:now
|
||||||
include:olevod
|
include:olevod
|
||||||
|
include:openrec
|
||||||
include:pbs
|
include:pbs
|
||||||
include:pixiv
|
include:pixiv
|
||||||
include:plutotv
|
include:plutotv
|
||||||
|
|||||||
@@ -57,10 +57,14 @@ anitabi.cn
|
|||||||
# 暴风影音
|
# 暴风影音
|
||||||
baofeng.com
|
baofeng.com
|
||||||
baofeng.net
|
baofeng.net
|
||||||
|
# 街机地图
|
||||||
|
bemanicn.com
|
||||||
# 布咕阅读
|
# 布咕阅读
|
||||||
bgwxc.com
|
bgwxc.com
|
||||||
# B站空降助手
|
# B站空降助手
|
||||||
bsbsb.top
|
bsbsb.top
|
||||||
|
# CdkeyNoGap
|
||||||
|
cdkeynogap.com
|
||||||
# 动漫之家 #703
|
# 动漫之家 #703
|
||||||
dmzj.com
|
dmzj.com
|
||||||
muwai.com
|
muwai.com
|
||||||
@@ -115,6 +119,8 @@ vsread.com
|
|||||||
yamibo.com
|
yamibo.com
|
||||||
# 易有料
|
# 易有料
|
||||||
yiyouliao.com
|
yiyouliao.com
|
||||||
|
# 游迅网
|
||||||
|
yxdown.com
|
||||||
# 战旗直播
|
# 战旗直播
|
||||||
zhanqi.tv
|
zhanqi.tv
|
||||||
# 逐浪小说
|
# 逐浪小说
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ include:okko
|
|||||||
include:wink
|
include:wink
|
||||||
24h.tv
|
24h.tv
|
||||||
amediateka.ru
|
amediateka.ru
|
||||||
|
beeline.tv
|
||||||
ivi.ru
|
ivi.ru
|
||||||
premier.one
|
premier.one
|
||||||
smotreshka.tv
|
smotreshka.tv
|
||||||
|
|||||||
@@ -43,6 +43,7 @@ include:xbox
|
|||||||
include:ynoproject
|
include:ynoproject
|
||||||
include:yostar
|
include:yostar
|
||||||
|
|
||||||
|
chunkbase.com
|
||||||
dinopoloclub.com
|
dinopoloclub.com
|
||||||
dodi-repacks.download
|
dodi-repacks.download
|
||||||
dodi-repacks.site
|
dodi-repacks.site
|
||||||
@@ -54,13 +55,17 @@ humblebundle.com
|
|||||||
joinsquad.com
|
joinsquad.com
|
||||||
loverslab.com
|
loverslab.com
|
||||||
minecraft.wiki
|
minecraft.wiki
|
||||||
|
minecraftforge.net
|
||||||
mobimon.com.tw
|
mobimon.com.tw
|
||||||
muvluv-girls-garden.com
|
muvluv-girls-garden.com
|
||||||
|
namemc.com
|
||||||
|
neoforged.net
|
||||||
nexus-cdn.com
|
nexus-cdn.com
|
||||||
nexusmods.com
|
nexusmods.com
|
||||||
noxygames.com
|
noxygames.com
|
||||||
offworldindustries.com
|
offworldindustries.com
|
||||||
offworldindustries.net
|
offworldindustries.net
|
||||||
|
optifine.net
|
||||||
papermc.io
|
papermc.io
|
||||||
planetminecraft.com
|
planetminecraft.com
|
||||||
prismlauncher.org
|
prismlauncher.org
|
||||||
@@ -69,4 +74,5 @@ quiltmc.org
|
|||||||
rayark.download
|
rayark.download
|
||||||
rayark.net
|
rayark.net
|
||||||
speedrun.com
|
speedrun.com
|
||||||
|
spigotmc.org
|
||||||
steamdb.info
|
steamdb.info
|
||||||
|
|||||||
@@ -20,6 +20,8 @@ include:yokaverse
|
|||||||
arcaea.cn
|
arcaea.cn
|
||||||
# 《异象回声》游戏官网 沪ICP备2023010411号-1
|
# 《异象回声》游戏官网 沪ICP备2023010411号-1
|
||||||
astral-vector.com
|
astral-vector.com
|
||||||
|
# 飞火游戏
|
||||||
|
feihuo.com
|
||||||
# 九九互动 粤ICP备19068416号
|
# 九九互动 粤ICP备19068416号
|
||||||
forevernine.com
|
forevernine.com
|
||||||
# 互动游戏对战平台 粤ICP备18006390号-1
|
# 互动游戏对战平台 粤ICP备18006390号-1
|
||||||
|
|||||||
@@ -1,69 +1,146 @@
|
|||||||
|
include:ipip
|
||||||
|
|
||||||
2ip.io
|
2ip.io
|
||||||
2ip.ru
|
2ip.ru
|
||||||
2ip.ua
|
2ip.ua
|
||||||
|
51degrees.com
|
||||||
abstractapi.com
|
abstractapi.com
|
||||||
|
apiip.net
|
||||||
|
apivoid.com
|
||||||
bigdatacloud.net
|
bigdatacloud.net
|
||||||
check-host.net
|
check-host.net
|
||||||
|
checkip.org
|
||||||
|
checkip.ru
|
||||||
|
country.is
|
||||||
|
curlmyip.net
|
||||||
|
dadata.ru
|
||||||
db-ip.com
|
db-ip.com
|
||||||
extreme-ip-lookup.com
|
extreme-ip-lookup.com
|
||||||
|
find-my-ip.com
|
||||||
|
find-my-ip.net
|
||||||
|
findip.net
|
||||||
|
flagfox.net
|
||||||
fraudguard.io
|
fraudguard.io
|
||||||
|
fraudlogix.com
|
||||||
freegeoip.app
|
freegeoip.app
|
||||||
freeipapi.com
|
freeipapi.com
|
||||||
|
geodatatool.com
|
||||||
|
geoip.noc.gov.ru
|
||||||
|
geojs.io
|
||||||
|
geolocation-db.com
|
||||||
|
geoplugin.com
|
||||||
geoplugin.net
|
geoplugin.net
|
||||||
getipintel.net
|
getipintel.net
|
||||||
|
greip.io
|
||||||
|
hackertarget.com
|
||||||
|
httpbin.org
|
||||||
|
icanhazip.com
|
||||||
|
ident.me
|
||||||
ifconfig.co
|
ifconfig.co
|
||||||
|
ifconfig.es
|
||||||
ifconfig.me
|
ifconfig.me
|
||||||
|
ip-adress.com
|
||||||
ip-api.com
|
ip-api.com
|
||||||
|
ip-api.io
|
||||||
|
ip-api.ru
|
||||||
|
ip-check.info
|
||||||
ip-score.com
|
ip-score.com
|
||||||
|
ip.me
|
||||||
|
ip.sb
|
||||||
|
ip2c.org
|
||||||
ip2location.com
|
ip2location.com
|
||||||
ip2location.io
|
ip2location.io
|
||||||
|
ip2ruscity.com
|
||||||
ip4.me
|
ip4.me
|
||||||
ip6.me
|
ip6.me
|
||||||
ip6only.me
|
ip6only.me
|
||||||
ip8.com
|
ip8.com
|
||||||
|
ipaddr.site
|
||||||
|
ipaddress.com
|
||||||
ipaddress.my
|
ipaddress.my
|
||||||
|
ipaddress.sh
|
||||||
ipapi.co
|
ipapi.co
|
||||||
|
ipapi.com
|
||||||
|
ipapi.is
|
||||||
ipbase.com
|
ipbase.com
|
||||||
|
ipcalf.com
|
||||||
ipchicken.com
|
ipchicken.com
|
||||||
ipdata.co
|
ipdata.co
|
||||||
|
ipecho.net
|
||||||
ipfind.io
|
ipfind.io
|
||||||
|
ipfinder.io
|
||||||
ipgeolocation.io
|
ipgeolocation.io
|
||||||
ipify.org
|
ipify.org
|
||||||
ipinfo.io
|
ipinfo.io
|
||||||
|
iplark.com @cn
|
||||||
ipleak.net
|
ipleak.net
|
||||||
|
ipligence.com
|
||||||
iplocate.io
|
iplocate.io
|
||||||
|
iplocation.com
|
||||||
iplocation.io
|
iplocation.io
|
||||||
iplocation.net
|
iplocation.net
|
||||||
ipqualityscore.com
|
ipqualityscore.com
|
||||||
|
ipquery.io
|
||||||
ipregistry.co
|
ipregistry.co
|
||||||
|
iproyal.com
|
||||||
ipstack.com
|
ipstack.com
|
||||||
|
ipverify.com
|
||||||
|
ipw.cn @cn
|
||||||
ipwhois.io
|
ipwhois.io
|
||||||
|
ipxapi.com
|
||||||
|
l2.io
|
||||||
maxmind.com
|
maxmind.com
|
||||||
mon-ip.com
|
mon-ip.com
|
||||||
monip.org
|
monip.org
|
||||||
|
my.ipinfo.app
|
||||||
myexternalip.com
|
myexternalip.com
|
||||||
myip.com
|
myip.com
|
||||||
myip.ms
|
myip.ms
|
||||||
myip.ru
|
myip.ru
|
||||||
|
myip.wtf
|
||||||
myipaddress.com
|
myipaddress.com
|
||||||
|
myiplookup.com
|
||||||
|
mylocation.org
|
||||||
|
osint.sh
|
||||||
proxycheck.io
|
proxycheck.io
|
||||||
|
realip.cc
|
||||||
seeip.org
|
seeip.org
|
||||||
|
showip.net
|
||||||
showmyip.com
|
showmyip.com
|
||||||
showmyipaddress.com
|
showmyipaddress.com
|
||||||
|
spur.us
|
||||||
sxgeo.city
|
sxgeo.city
|
||||||
sypexgeo.net
|
sypexgeo.net
|
||||||
|
tnx.nl
|
||||||
tracemyip.org
|
tracemyip.org
|
||||||
|
trustmyip.com
|
||||||
|
wgetip.com
|
||||||
whatismyip.com
|
whatismyip.com
|
||||||
whatismyip.net
|
whatismyip.net
|
||||||
whatismyip.org
|
whatismyip.org
|
||||||
whatismyipaddress.com
|
whatismyipaddress.com
|
||||||
|
whatismyipaddress.net
|
||||||
whatismyisp.com
|
whatismyisp.com
|
||||||
whatismyv6.com
|
whatismyv6.com
|
||||||
whatsmyip.com
|
whatsmyip.com
|
||||||
whatsmyip.org
|
whatsmyip.org
|
||||||
where-am-i.co
|
where-am-i.co
|
||||||
whoer.net
|
whoer.net
|
||||||
|
whoerip.com
|
||||||
|
whoisxmlapi.com
|
||||||
wieistmeineip.de
|
wieistmeineip.de
|
||||||
wtfismyip.com
|
wtfismyip.com
|
||||||
|
|
||||||
|
# Subdomains/internal api used for ip-geo-detect
|
||||||
full:checkip.amazonaws.com
|
full:checkip.amazonaws.com
|
||||||
|
full:ipv4-check-perf.radar.cloudflare.com
|
||||||
|
full:ipv6-check-perf.radar.cloudflare.com
|
||||||
|
geoip.noc.gov.ru
|
||||||
|
ip.hetzner.com
|
||||||
|
ip.mail.ru
|
||||||
|
ip.nic.ru
|
||||||
|
ip.tyk.nu
|
||||||
|
ipgeo.vercel.app
|
||||||
|
ipv4-internet.yandex.net
|
||||||
|
ipv6-internet.yandex.net
|
||||||
|
whois.pconline.com.cn @cn
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ include:ynet
|
|||||||
admin5.com
|
admin5.com
|
||||||
# 安徽新闻
|
# 安徽新闻
|
||||||
anhuinews.com
|
anhuinews.com
|
||||||
|
anhuiyun.com
|
||||||
# 锋潮科技
|
# 锋潮科技
|
||||||
anzhuo.cn
|
anzhuo.cn
|
||||||
# 鞭牛士
|
# 鞭牛士
|
||||||
@@ -50,6 +51,11 @@ cqnews.net
|
|||||||
cqsjb.com
|
cqsjb.com
|
||||||
# 中证网
|
# 中证网
|
||||||
cs.com.cn
|
cs.com.cn
|
||||||
|
# 极目新闻/楚天都市报
|
||||||
|
ctdsb.net
|
||||||
|
full:ctdsb.clouddiffuse.xyz
|
||||||
|
# 创头条
|
||||||
|
ctoutiao.com
|
||||||
# 创业邦
|
# 创业邦
|
||||||
cyzone.cn
|
cyzone.cn
|
||||||
# 浙江广播电视集团/浙江卫视/新蓝网
|
# 浙江广播电视集团/浙江卫视/新蓝网
|
||||||
@@ -78,6 +84,8 @@ freebuf.com
|
|||||||
geekpark.net
|
geekpark.net
|
||||||
# 光明网
|
# 光明网
|
||||||
gmw.com
|
gmw.com
|
||||||
|
# 观察者网
|
||||||
|
guancha.cn
|
||||||
# 硅谷网
|
# 硅谷网
|
||||||
guigu.org
|
guigu.org
|
||||||
# 同花顺
|
# 同花顺
|
||||||
@@ -101,8 +109,12 @@ huxiu.com
|
|||||||
huxiucdn.com
|
huxiucdn.com
|
||||||
# 电脑报
|
# 电脑报
|
||||||
icpcw.com
|
icpcw.com
|
||||||
|
# 长沙晚报
|
||||||
|
icswb.com
|
||||||
# 中国IDC圈
|
# 中国IDC圈
|
||||||
idcquan.com
|
idcquan.com
|
||||||
|
# 砍柴网
|
||||||
|
ikanchai.com
|
||||||
# 艾瑞咨询
|
# 艾瑞咨询
|
||||||
iresearch.cn
|
iresearch.cn
|
||||||
# IT168
|
# IT168
|
||||||
@@ -116,6 +128,8 @@ jin10.com
|
|||||||
# 上观新闻/解放日报
|
# 上观新闻/解放日报
|
||||||
jfdaily.com
|
jfdaily.com
|
||||||
shobserver.com
|
shobserver.com
|
||||||
|
# 新黄河/济南时报
|
||||||
|
jinantimes.com.cn
|
||||||
# 机器之心
|
# 机器之心
|
||||||
jiqizhixin.com
|
jiqizhixin.com
|
||||||
# 金融界
|
# 金融界
|
||||||
@@ -124,6 +138,8 @@ jrjimg.cn
|
|||||||
# 江苏省广播电视总台
|
# 江苏省广播电视总台
|
||||||
jsbc.com
|
jsbc.com
|
||||||
jstv.com
|
jstv.com
|
||||||
|
# 大江网/江西日报社
|
||||||
|
jxnews.com.cn
|
||||||
# 江西省出版传媒集团
|
# 江西省出版传媒集团
|
||||||
jxpp.com
|
jxpp.com
|
||||||
# 晋中广播电视台视听网
|
# 晋中广播电视台视听网
|
||||||
@@ -133,8 +149,14 @@ kankanews.com
|
|||||||
kankannews.com
|
kankannews.com
|
||||||
kksmg.com
|
kksmg.com
|
||||||
statickksmg.com
|
statickksmg.com
|
||||||
|
# 新智派
|
||||||
|
knewsmart.com
|
||||||
# 晚点
|
# 晚点
|
||||||
latepost.com
|
latepost.com
|
||||||
|
# 雷科技
|
||||||
|
leikeji.com
|
||||||
|
# 雷峰网
|
||||||
|
leiphone.com
|
||||||
# 今日观察网
|
# 今日观察网
|
||||||
miercn.com
|
miercn.com
|
||||||
# 快科技
|
# 快科技
|
||||||
@@ -154,6 +176,8 @@ pchome.net
|
|||||||
pchpic.net
|
pchpic.net
|
||||||
# PConline 太平洋科技
|
# PConline 太平洋科技
|
||||||
3conline.com
|
3conline.com
|
||||||
|
pcauto.com.cn
|
||||||
|
pchouse.com.cn
|
||||||
pconline.com.cn
|
pconline.com.cn
|
||||||
# 泡泡网
|
# 泡泡网
|
||||||
pcpop.com
|
pcpop.com
|
||||||
@@ -183,6 +207,8 @@ sfccn.com
|
|||||||
shangyexinzhi.com
|
shangyexinzhi.com
|
||||||
# 奇客资讯网
|
# 奇客资讯网
|
||||||
solidot.org
|
solidot.org
|
||||||
|
# 速途网
|
||||||
|
sootoo.com
|
||||||
# 南方新闻网
|
# 南方新闻网
|
||||||
southcn.com
|
southcn.com
|
||||||
# 南方财富网
|
# 南方财富网
|
||||||
@@ -202,22 +228,35 @@ szpgm.com
|
|||||||
takungpao.com
|
takungpao.com
|
||||||
# TechWeb
|
# TechWeb
|
||||||
techweb.com.cn
|
techweb.com.cn
|
||||||
|
# 科技行者
|
||||||
|
techwalker.com
|
||||||
# 封面新闻
|
# 封面新闻
|
||||||
thecover.cn
|
thecover.cn
|
||||||
# 澎湃新闻
|
# 澎湃新闻
|
||||||
thepaper.cn
|
thepaper.cn
|
||||||
|
# 潮新闻/浙江日报
|
||||||
|
8531.cn
|
||||||
|
tidenews.com.cn
|
||||||
# 人人都是产品经理
|
# 人人都是产品经理
|
||||||
woshipm.com
|
woshipm.com
|
||||||
|
# 新华日报
|
||||||
|
xhby.net
|
||||||
# 西陆网
|
# 西陆网
|
||||||
xilu.com
|
xilu.com
|
||||||
# 新快报
|
# 新快报
|
||||||
xkb.com.cn
|
xkb.com.cn
|
||||||
|
# 金羊网/羊城晚报
|
||||||
|
ycwb.com
|
||||||
# 第一财经
|
# 第一财经
|
||||||
yicai.com
|
yicai.com
|
||||||
|
# 扬子晚报
|
||||||
|
yzwb.net
|
||||||
# ZEALER
|
# ZEALER
|
||||||
zealer.com
|
zealer.com
|
||||||
# 知产力
|
# 知产力
|
||||||
zhichanli.com
|
zhichanli.com
|
||||||
|
# 至顶网
|
||||||
|
zhiding.cn
|
||||||
# 中关村在线
|
# 中关村在线
|
||||||
zol-img.com.cn
|
zol-img.com.cn
|
||||||
zol.com.cn
|
zol.com.cn
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ include:doi
|
|||||||
include:elsevier
|
include:elsevier
|
||||||
include:google-scholar
|
include:google-scholar
|
||||||
include:ieee
|
include:ieee
|
||||||
include:knovel
|
|
||||||
include:mit
|
include:mit
|
||||||
include:proquest
|
include:proquest
|
||||||
include:sci-hub
|
include:sci-hub
|
||||||
|
|||||||
@@ -3,33 +3,62 @@ include:openspeedtest
|
|||||||
|
|
||||||
cnspeedtest.cn @cn
|
cnspeedtest.cn @cn
|
||||||
fast.com
|
fast.com
|
||||||
|
fastspeedtest.com
|
||||||
|
linkmeter.net
|
||||||
measurementlab.net
|
measurementlab.net
|
||||||
|
meter.net
|
||||||
nperf.com
|
nperf.com
|
||||||
|
openspeedtest.ru
|
||||||
speed.cloudflare.com
|
speed.cloudflare.com
|
||||||
speed.dler.io
|
speed.dler.io
|
||||||
|
speed.ee
|
||||||
speed.hinet.net
|
speed.hinet.net
|
||||||
speed.nccu.edu.tw
|
speed.nccu.edu.tw
|
||||||
speed.neu6.edu.cn @cn
|
speed.neu6.edu.cn @cn
|
||||||
|
speed.nju.edu.cn @cn
|
||||||
speed.nuaa.edu.cn @cn
|
speed.nuaa.edu.cn @cn
|
||||||
speed.qlu.edu.cn @cn
|
speed.qlu.edu.cn @cn
|
||||||
speed.ujs.edu.cn @cn
|
speed.ujs.edu.cn @cn
|
||||||
speed6.ujs.edu.cn @cn
|
|
||||||
speed2.hinet.net
|
speed2.hinet.net
|
||||||
speed5.ntu.edu.tw
|
speed5.ntu.edu.tw
|
||||||
|
speed6.ujs.edu.cn @cn
|
||||||
|
speedcheck.org
|
||||||
|
speedgeo.net
|
||||||
|
speedof.me
|
||||||
|
speedtest.cesnet.cz
|
||||||
|
speedtest.ch
|
||||||
|
speedtest.citylink.pro
|
||||||
speedtest.cn @cn
|
speedtest.cn @cn
|
||||||
|
speedtest.co.za
|
||||||
|
speedtest.de
|
||||||
|
speedtest.dno-it.ru
|
||||||
|
speedtest.frontier.com
|
||||||
speedtest.im
|
speedtest.im
|
||||||
|
speedtest.mail.ru
|
||||||
speedtest.mfcyun.com @cn
|
speedtest.mfcyun.com @cn
|
||||||
|
speedtest.net.in
|
||||||
|
speedtest.net.ua
|
||||||
|
speedtest.net.uk
|
||||||
|
speedtest.org
|
||||||
|
speedtest.rt.ru
|
||||||
|
speedtest.ru
|
||||||
|
speedtest.shaw.ca
|
||||||
speedtest.shu.edu.cn @cn
|
speedtest.shu.edu.cn @cn
|
||||||
speedtest6.shu.edu.cn @cn
|
speedtest.su
|
||||||
|
speedtest.uz
|
||||||
|
speedtest.volia.com
|
||||||
speedtest.xaut.edu.cn @cn
|
speedtest.xaut.edu.cn @cn
|
||||||
speedtest.xfinity.com
|
speedtest.xfinity.com
|
||||||
speedtestcustom.com
|
speedtest.xyz
|
||||||
test.ustc.edu.cn @cn
|
speedtest24.ru
|
||||||
test6.ustc.edu.cn @cn
|
speedtest6.shu.edu.cn @cn
|
||||||
test.nju.edu.cn @cn
|
test.nju.edu.cn @cn
|
||||||
|
test.ustc.edu.cn @cn
|
||||||
test6.nju.edu.cn @cn
|
test6.nju.edu.cn @cn
|
||||||
speed.nju.edu.cn @cn
|
test6.ustc.edu.cn @cn
|
||||||
testmy.net
|
testmy.net
|
||||||
|
testmyspeed.com
|
||||||
|
testskorosti.ru
|
||||||
xnfz.seu.edu.cn @cn
|
xnfz.seu.edu.cn @cn
|
||||||
|
|
||||||
full:hk-global-bgp.hkg.speedtest.yecaoyun.com @!cn
|
full:hk-global-bgp.hkg.speedtest.yecaoyun.com @!cn
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
allhistory.com
|
||||||
fgo.wiki
|
fgo.wiki
|
||||||
jikipedia.com
|
jikipedia.com
|
||||||
mbalib.com
|
mbalib.com
|
||||||
|
|||||||
@@ -16,6 +16,9 @@ miguvideo.com
|
|||||||
# 中移金科
|
# 中移金科
|
||||||
cmft.com.cn
|
cmft.com.cn
|
||||||
|
|
||||||
|
# 中移支付 和包
|
||||||
|
cmpay.com
|
||||||
|
|
||||||
# 中移在线
|
# 中移在线
|
||||||
cmcc-cs.cn
|
cmcc-cs.cn
|
||||||
online-cmcc.cn
|
online-cmcc.cn
|
||||||
|
|||||||
@@ -1,10 +1,11 @@
|
|||||||
include:ctexcel
|
include:ctexcel
|
||||||
|
|
||||||
189.cn
|
189.cn
|
||||||
|
bestpay.cn
|
||||||
|
bestpay.com.cn
|
||||||
chinatelecom-h.com
|
chinatelecom-h.com
|
||||||
chinatelecom.com.cn
|
chinatelecom.com.cn
|
||||||
chinatelecomglobal.com @!cn
|
chinatelecomglobal.com @!cn
|
||||||
|
chinatelecomhk.com @!cn
|
||||||
chntel.com
|
chntel.com
|
||||||
vnet.cn
|
vnet.cn
|
||||||
|
|
||||||
chinatelecomhk.com @!cn
|
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ cuguplus.com @!cn
|
|||||||
cuniq.com @!cn
|
cuniq.com @!cn
|
||||||
cuniq.sg @!cn
|
cuniq.sg @!cn
|
||||||
mychinaunicom.com
|
mychinaunicom.com
|
||||||
|
unicompayment.com
|
||||||
wo.cn
|
wo.cn
|
||||||
wo.com.cn
|
wo.com.cn
|
||||||
wo116114.com
|
wo116114.com
|
||||||
|
|||||||
@@ -1 +0,0 @@
|
|||||||
doc88.com
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
docin.com
|
|
||||||
douding.cn
|
|
||||||
@@ -65,3 +65,6 @@ supercachenode.com
|
|||||||
ultracachenode.com
|
ultracachenode.com
|
||||||
woaihuoshan.com
|
woaihuoshan.com
|
||||||
wohst8.com
|
wohst8.com
|
||||||
|
|
||||||
|
# 抖音支付
|
||||||
|
douyinpay.com
|
||||||
|
|||||||
@@ -85,7 +85,6 @@ include:embl
|
|||||||
include:freecodecamp
|
include:freecodecamp
|
||||||
include:kaggle
|
include:kaggle
|
||||||
include:khanacademy
|
include:khanacademy
|
||||||
include:knovel
|
|
||||||
include:laracasts
|
include:laracasts
|
||||||
include:libgen
|
include:libgen
|
||||||
include:lifewire
|
include:lifewire
|
||||||
@@ -259,6 +258,10 @@ cookielaw.org
|
|||||||
onetrust.com
|
onetrust.com
|
||||||
osano.com
|
osano.com
|
||||||
usercentrics.eu
|
usercentrics.eu
|
||||||
|
## Dynatrace
|
||||||
|
dynatrace.com
|
||||||
|
## FamilySearch
|
||||||
|
familysearch.org
|
||||||
## Greasy Fork
|
## Greasy Fork
|
||||||
greasyfork.org
|
greasyfork.org
|
||||||
## Online LaTeX Editor
|
## Online LaTeX Editor
|
||||||
@@ -273,6 +276,8 @@ immersivetranslate.com # 沉浸式翻译 (国际版)
|
|||||||
originlab.com
|
originlab.com
|
||||||
## OsmAnd
|
## OsmAnd
|
||||||
osmand.net
|
osmand.net
|
||||||
|
## Xiaomi Flash (not affiliated with the official Xiaomi)
|
||||||
|
xiaomiflash.com
|
||||||
|
|
||||||
# Software development
|
# Software development
|
||||||
include:category-dev
|
include:category-dev
|
||||||
@@ -323,3 +328,5 @@ include:tsquare
|
|||||||
include:windy
|
include:windy
|
||||||
include:xdty
|
include:xdty
|
||||||
include:xingrz
|
include:xingrz
|
||||||
|
|
||||||
|
sinyalee.com
|
||||||
|
|||||||
@@ -45,6 +45,8 @@ include:taikang
|
|||||||
|
|
||||||
## 航财通·校园付
|
## 航财通·校园付
|
||||||
cc-pay.cn
|
cc-pay.cn
|
||||||
|
## 合利宝
|
||||||
|
helipay.com
|
||||||
## 徽商期货有限责任公司
|
## 徽商期货有限责任公司
|
||||||
hsqh.net
|
hsqh.net
|
||||||
## 上海陆金所
|
## 上海陆金所
|
||||||
@@ -53,6 +55,8 @@ lufax.com
|
|||||||
lufaxcdn.com
|
lufaxcdn.com
|
||||||
## 银豹收银系统
|
## 银豹收银系统
|
||||||
pospal.cn
|
pospal.cn
|
||||||
|
## 上海付费通
|
||||||
|
shfft.com
|
||||||
|
|
||||||
# CDN or SDWAN
|
# CDN or SDWAN
|
||||||
include:category-cdn-cn
|
include:category-cdn-cn
|
||||||
@@ -154,6 +158,7 @@ include:kechuang
|
|||||||
include:nga
|
include:nga
|
||||||
include:stage1st
|
include:stage1st
|
||||||
|
|
||||||
|
178linux.com # Linux运维部落
|
||||||
52pojie.cn # 吾爱破解
|
52pojie.cn # 吾爱破解
|
||||||
anywlan.com # 无线论坛
|
anywlan.com # 无线论坛
|
||||||
chinadsl.net # 宽带技术网
|
chinadsl.net # 宽带技术网
|
||||||
@@ -180,6 +185,9 @@ wuyou.net # 无忧启动论坛
|
|||||||
x-station.cn # X电站
|
x-station.cn # X电站
|
||||||
znds.com # 智能电视网
|
znds.com # 智能电视网
|
||||||
|
|
||||||
|
# 51CTO
|
||||||
|
51cto.com
|
||||||
|
51ctocdn.cn
|
||||||
# DCC Forum(心跳文学部中文论坛)
|
# DCC Forum(心跳文学部中文论坛)
|
||||||
edgemonix.top # 图床
|
edgemonix.top # 图床
|
||||||
monika.love
|
monika.love
|
||||||
@@ -218,27 +226,73 @@ mingxuan.store
|
|||||||
gov.cn
|
gov.cn
|
||||||
## 中国气象局
|
## 中国气象局
|
||||||
cma.cn
|
cma.cn
|
||||||
|
## 政务和公益机构域名注册管理中心
|
||||||
|
conac.cn
|
||||||
## 中央气象台
|
## 中央气象台
|
||||||
nmc.cn
|
nmc.cn
|
||||||
|
## 中国互联网联合辟谣平台
|
||||||
|
piyao.org.cn
|
||||||
|
|
||||||
# Public transportation
|
# Public transportation
|
||||||
include:airchina # 中国国际航空
|
## 中国国际航空
|
||||||
include:hainanairlines # 海南航空
|
include:airchina
|
||||||
|
## 海南航空
|
||||||
|
include:hainanairlines
|
||||||
|
## 长安航空
|
||||||
|
airchangan.com
|
||||||
|
## 桂林航空
|
||||||
|
airguilin.com
|
||||||
|
## 中国东方航空
|
||||||
|
ceair.com
|
||||||
|
## 春秋航空
|
||||||
|
ch.com
|
||||||
|
china-sss.com
|
||||||
|
springairlines.com
|
||||||
|
## 华夏航空
|
||||||
|
chinaexpressair.com
|
||||||
|
## 中国南方航空
|
||||||
|
csair.com
|
||||||
|
## 中国联合航空
|
||||||
|
flycua.com
|
||||||
|
## 广西北部湾航空
|
||||||
|
gxairlines.com
|
||||||
|
## 河北航空
|
||||||
|
hbhk.com.cn
|
||||||
|
## 首都航空
|
||||||
|
jdair.net
|
||||||
|
## 吉祥航空
|
||||||
|
juneyaoair.com
|
||||||
|
## 长龙航空
|
||||||
|
loongair.cn
|
||||||
|
## 祥鹏航空
|
||||||
|
luckyair.net
|
||||||
|
## 山东航空
|
||||||
|
sda.cn
|
||||||
|
## 深圳航空
|
||||||
|
shenzhenair.com
|
||||||
|
## 四川航空
|
||||||
|
sichuanair.com
|
||||||
|
## 天津航空
|
||||||
|
tianjin-air.com
|
||||||
|
## 西藏航空
|
||||||
|
tibetairlines.com.cn
|
||||||
|
## 乌鲁木齐航空
|
||||||
|
urumqi-air.com
|
||||||
|
## 厦门航空
|
||||||
|
xiamenair.com
|
||||||
|
|
||||||
|
## 中国民航局
|
||||||
|
caac.gov.cn
|
||||||
|
## 信天游(航空电子客票验真)
|
||||||
|
travelskymobile.cn
|
||||||
|
## 航旅纵横
|
||||||
|
umetrip.com
|
||||||
|
umetrip.com.cn
|
||||||
|
umetrip.net.cn
|
||||||
|
ume-trip.cn
|
||||||
|
## 飞常准
|
||||||
|
variflight.com
|
||||||
|
|
||||||
# 中国民航局 caac.gov.cn
|
|
||||||
ceair.com # 中国东方航空
|
|
||||||
chinaexpressair.com # 华夏航空
|
|
||||||
csair.com # 中国南方航空
|
|
||||||
flycua.com # 中国联合航空
|
|
||||||
hbhk.com.cn # 河北航空
|
|
||||||
jdair.net # 首都航空
|
|
||||||
juneyaoair.com # 吉祥航空
|
|
||||||
luckyair.net # 祥鹏航空
|
|
||||||
sichuanair.com # 四川航空
|
|
||||||
tibetairlines.com.cn # 西藏航空
|
|
||||||
travelskymobile.cn # 信天游(航空电子客票验真)
|
|
||||||
variflight.com # 飞常准
|
|
||||||
xiamenair.com # 厦门航空
|
|
||||||
## Railway
|
## Railway
|
||||||
12306.cn
|
12306.cn
|
||||||
95306.cn
|
95306.cn
|
||||||
@@ -253,11 +307,6 @@ kuajing84.com
|
|||||||
mygolbs.com
|
mygolbs.com
|
||||||
## 宁停车
|
## 宁停车
|
||||||
ningtingche.com
|
ningtingche.com
|
||||||
## 航旅纵横
|
|
||||||
umetrip.com
|
|
||||||
umetrip.com.cn
|
|
||||||
umetrip.net.cn
|
|
||||||
ume-trip.cn
|
|
||||||
|
|
||||||
# Science & Technology & Knowledge & Scholar & Press & E-learning & Education
|
# Science & Technology & Knowledge & Scholar & Press & E-learning & Education
|
||||||
include:category-education-cn
|
include:category-education-cn
|
||||||
@@ -280,10 +329,14 @@ webterren.com
|
|||||||
## 国学大师网
|
## 国学大师网
|
||||||
guoxuedashi.com
|
guoxuedashi.com
|
||||||
guoxuemi.com
|
guoxuemi.com
|
||||||
## 志愿汇
|
|
||||||
zyh365.com
|
|
||||||
## 温州市图书馆
|
## 温州市图书馆
|
||||||
wzlib.cn
|
wzlib.cn
|
||||||
|
## 中国大百科全书
|
||||||
|
zgbk.com
|
||||||
|
## 浙江图书馆
|
||||||
|
zjlib.cn
|
||||||
|
## 志愿汇
|
||||||
|
zyh365.com
|
||||||
|
|
||||||
# Services & Softwares
|
# Services & Softwares
|
||||||
include:category-ai-cn
|
include:category-ai-cn
|
||||||
@@ -339,6 +392,8 @@ alookweb.com
|
|||||||
## 安兔兔
|
## 安兔兔
|
||||||
antutu.com
|
antutu.com
|
||||||
antutu.net
|
antutu.net
|
||||||
|
## 问答库
|
||||||
|
asklib.com
|
||||||
## 拓竹科技
|
## 拓竹科技
|
||||||
bambulab.com
|
bambulab.com
|
||||||
bblmw.com
|
bblmw.com
|
||||||
@@ -415,12 +470,15 @@ tianqi.com
|
|||||||
tianqistatic.com
|
tianqistatic.com
|
||||||
## Via 浏览器
|
## Via 浏览器
|
||||||
viayoo.com
|
viayoo.com
|
||||||
|
## 问卷网
|
||||||
|
wenjuan.com
|
||||||
## X 浏览器
|
## X 浏览器
|
||||||
xbext.com
|
xbext.com
|
||||||
## 印象笔记
|
## 印象笔记
|
||||||
yinxiang.com
|
yinxiang.com
|
||||||
## 智联招聘
|
## 智联招聘
|
||||||
zhaopin.cn
|
zhaopin.cn
|
||||||
|
zhaopin.com
|
||||||
|
|
||||||
# Tech companies & Orginations
|
# Tech companies & Orginations
|
||||||
include:aisiku # 北京艾斯酷科技有限公司
|
include:aisiku # 北京艾斯酷科技有限公司
|
||||||
@@ -576,7 +634,6 @@ ycrx360.com
|
|||||||
1637.com
|
1637.com
|
||||||
16888.com
|
16888.com
|
||||||
16rd.com
|
16rd.com
|
||||||
178linux.com
|
|
||||||
17989.com
|
17989.com
|
||||||
17cdn.com
|
17cdn.com
|
||||||
17house.com
|
17house.com
|
||||||
@@ -606,7 +663,6 @@ ycrx360.com
|
|||||||
35.com
|
35.com
|
||||||
3533.com
|
3533.com
|
||||||
360aiyi.com
|
360aiyi.com
|
||||||
360doc.com
|
|
||||||
360jq.com
|
360jq.com
|
||||||
360zhyx.com
|
360zhyx.com
|
||||||
365azw.com
|
365azw.com
|
||||||
@@ -627,14 +683,12 @@ ycrx360.com
|
|||||||
51.com
|
51.com
|
||||||
510you.com
|
510you.com
|
||||||
51credit.com
|
51credit.com
|
||||||
51cto.com
|
|
||||||
51eshop.com
|
51eshop.com
|
||||||
51gaifang.com
|
51gaifang.com
|
||||||
51hejia.com
|
51hejia.com
|
||||||
51jingying.com
|
51jingying.com
|
||||||
51meishu.com
|
51meishu.com
|
||||||
51sole.com
|
51sole.com
|
||||||
51wendang.com
|
|
||||||
51yes.com
|
51yes.com
|
||||||
5253.com
|
5253.com
|
||||||
52hxw.com
|
52hxw.com
|
||||||
@@ -643,7 +697,6 @@ ycrx360.com
|
|||||||
52z.com
|
52z.com
|
||||||
53kf.com
|
53kf.com
|
||||||
55.com
|
55.com
|
||||||
56.com
|
|
||||||
5577.com
|
5577.com
|
||||||
55bbs.com
|
55bbs.com
|
||||||
58pic.com
|
58pic.com
|
||||||
@@ -689,8 +742,6 @@ aiemy.com
|
|||||||
aiketour.com
|
aiketour.com
|
||||||
aiops.com
|
aiops.com
|
||||||
aipai.com
|
aipai.com
|
||||||
airchangan.com
|
|
||||||
airguilin.com
|
|
||||||
aiskycn.com
|
aiskycn.com
|
||||||
aizhan.com
|
aizhan.com
|
||||||
aldwx.com # 京ICP备17030349号-1
|
aldwx.com # 京ICP备17030349号-1
|
||||||
@@ -706,7 +757,6 @@ apk8.com
|
|||||||
aplaybox.com
|
aplaybox.com
|
||||||
appchina.com
|
appchina.com
|
||||||
arpun.com
|
arpun.com
|
||||||
asklib.com
|
|
||||||
babytree.com
|
babytree.com
|
||||||
babytreeimg.com
|
babytreeimg.com
|
||||||
baidufree.com
|
baidufree.com
|
||||||
@@ -754,7 +804,6 @@ cecdc.com
|
|||||||
cecport.com
|
cecport.com
|
||||||
centanet.com
|
centanet.com
|
||||||
cerambath.org
|
cerambath.org
|
||||||
ch.com
|
|
||||||
chachaba.com
|
chachaba.com
|
||||||
changba.com
|
changba.com
|
||||||
chaojituzi.net
|
chaojituzi.net
|
||||||
@@ -810,7 +859,6 @@ csbew.com
|
|||||||
csmjzs.com
|
csmjzs.com
|
||||||
csslcloud.net
|
csslcloud.net
|
||||||
ctiforum.com
|
ctiforum.com
|
||||||
ctoutiao.com
|
|
||||||
ctsbw.com
|
ctsbw.com
|
||||||
cubead.com
|
cubead.com
|
||||||
cwxzx.com
|
cwxzx.com
|
||||||
@@ -860,8 +908,6 @@ downyi.com
|
|||||||
dpfile.com
|
dpfile.com
|
||||||
dreams-travel.com
|
dreams-travel.com
|
||||||
drivergenius.com
|
drivergenius.com
|
||||||
dui.ai
|
|
||||||
duiopen.com
|
|
||||||
duoduocdn.com
|
duoduocdn.com
|
||||||
duomai.com
|
duomai.com
|
||||||
duoshuo.com
|
duoshuo.com
|
||||||
@@ -894,7 +940,6 @@ fanli.com
|
|||||||
fangxiaoer.com
|
fangxiaoer.com
|
||||||
fanxian.com
|
fanxian.com
|
||||||
fastapi.net
|
fastapi.net
|
||||||
feihuo.com
|
|
||||||
feiniaomy.com
|
feiniaomy.com
|
||||||
fengniao.com
|
fengniao.com
|
||||||
fengxian110.com
|
fengxian110.com
|
||||||
@@ -939,7 +984,6 @@ gupzs.com
|
|||||||
gushiwen.org
|
gushiwen.org
|
||||||
guzhangting.com
|
guzhangting.com
|
||||||
gwdang.com
|
gwdang.com
|
||||||
gxairlines.com
|
|
||||||
gxb.io
|
gxb.io
|
||||||
gzcqs.com
|
gzcqs.com
|
||||||
gzwanju.com
|
gzwanju.com
|
||||||
@@ -1048,7 +1092,6 @@ k366.com
|
|||||||
kaifubiao.com
|
kaifubiao.com
|
||||||
kaixin001.com
|
kaixin001.com
|
||||||
kameng98.com
|
kameng98.com
|
||||||
kanimg.com
|
|
||||||
kantianqi.net
|
kantianqi.net
|
||||||
kanzhun.com
|
kanzhun.com
|
||||||
kaopu001.com
|
kaopu001.com
|
||||||
@@ -1076,8 +1119,6 @@ lascn.net
|
|||||||
lawxp.com
|
lawxp.com
|
||||||
leangoo.com
|
leangoo.com
|
||||||
leanote.com
|
leanote.com
|
||||||
leikeji.com
|
|
||||||
leiphone.com
|
|
||||||
leiting.com
|
leiting.com
|
||||||
leju.com
|
leju.com
|
||||||
leturich.org
|
leturich.org
|
||||||
@@ -1297,7 +1338,6 @@ taoche.com
|
|||||||
te5.com
|
te5.com
|
||||||
tenxcloud.com
|
tenxcloud.com
|
||||||
tianjimedia.com
|
tianjimedia.com
|
||||||
tianjin-air.com
|
|
||||||
tianlailive.com
|
tianlailive.com
|
||||||
tietuku.com
|
tietuku.com
|
||||||
tiexue.net
|
tiexue.net
|
||||||
@@ -1333,7 +1373,6 @@ ucbug.com
|
|||||||
uggame.com
|
uggame.com
|
||||||
uoko.com
|
uoko.com
|
||||||
urselect.com
|
urselect.com
|
||||||
urumqi-air.com
|
|
||||||
useso.com
|
useso.com
|
||||||
uuu9.com
|
uuu9.com
|
||||||
uzzf.com
|
uzzf.com
|
||||||
@@ -1354,17 +1393,14 @@ wanwushuo.com
|
|||||||
wanyiwang.com
|
wanyiwang.com
|
||||||
wanyx.com
|
wanyx.com
|
||||||
warmheart.top # 苏ICP备16016970号-1
|
warmheart.top # 苏ICP备16016970号-1
|
||||||
wdjimg.com
|
|
||||||
wdzj.com
|
wdzj.com
|
||||||
weand.com
|
weand.com
|
||||||
weavatar.com
|
weavatar.com
|
||||||
weicaifu.com
|
weicaifu.com
|
||||||
weilaicaijing.com
|
weilaicaijing.com
|
||||||
weiphone.net
|
|
||||||
weixing.com
|
weixing.com
|
||||||
weiyangx.com
|
weiyangx.com
|
||||||
welltrend-edu.com
|
welltrend-edu.com
|
||||||
wenjuan.com
|
|
||||||
whlovehome.com
|
whlovehome.com
|
||||||
wicresoft.com
|
wicresoft.com
|
||||||
win007.com
|
win007.com
|
||||||
@@ -1402,7 +1438,6 @@ xiaoe-tech.com
|
|||||||
xiaogouh5.com
|
xiaogouh5.com
|
||||||
xiaoka.tv
|
xiaoka.tv
|
||||||
xiaokaxiu.com
|
xiaokaxiu.com
|
||||||
xiaomiflash.com
|
|
||||||
xiaomingtaiji.com
|
xiaomingtaiji.com
|
||||||
xiaoxiongxitong.com
|
xiaoxiongxitong.com
|
||||||
xiaoyuxitong.com
|
xiaoyuxitong.com
|
||||||
@@ -1467,7 +1502,6 @@ youxigt.com
|
|||||||
youzu.com
|
youzu.com
|
||||||
yoyojie.com
|
yoyojie.com
|
||||||
yoyou.com
|
yoyou.com
|
||||||
ypppt.com
|
|
||||||
yrz.name
|
yrz.name
|
||||||
yslyhr.com
|
yslyhr.com
|
||||||
ysten.com
|
ysten.com
|
||||||
@@ -1481,7 +1515,6 @@ yunzhijia.com
|
|||||||
yupoo.com
|
yupoo.com
|
||||||
yuzua.com
|
yuzua.com
|
||||||
yxbao.com
|
yxbao.com
|
||||||
yxdown.com
|
|
||||||
yytcdn.com
|
yytcdn.com
|
||||||
z28j.com # 鄂ICP备20002930号-1
|
z28j.com # 鄂ICP备20002930号-1
|
||||||
zampda.net
|
zampda.net
|
||||||
@@ -1490,7 +1523,6 @@ zastatic.com
|
|||||||
zczj.com
|
zczj.com
|
||||||
zdfans.com
|
zdfans.com
|
||||||
zgjm.org
|
zgjm.org
|
||||||
zgjsks.com
|
|
||||||
zglxw.com
|
zglxw.com
|
||||||
zgzcw.com
|
zgzcw.com
|
||||||
zhanbuba.com
|
zhanbuba.com
|
||||||
@@ -1498,7 +1530,6 @@ zhangyoubao.com
|
|||||||
zhanzhang.net
|
zhanzhang.net
|
||||||
zhaodanji.com
|
zhaodanji.com
|
||||||
zhaokao.net
|
zhaokao.net
|
||||||
zhaopin.com
|
|
||||||
zhcw.com
|
zhcw.com
|
||||||
zhenai.com
|
zhenai.com
|
||||||
zhibo8.cc
|
zhibo8.cc
|
||||||
@@ -1509,15 +1540,11 @@ zhongkao.com
|
|||||||
zhuangjiba.com
|
zhuangjiba.com
|
||||||
zhuanyewanjia.com
|
zhuanyewanjia.com
|
||||||
zhuayoukong.com
|
zhuayoukong.com
|
||||||
zimuzu.io
|
|
||||||
zixiaomao.com
|
zixiaomao.com
|
||||||
zixuntop.com
|
zixuntop.com
|
||||||
zmengzhu.com
|
zmengzhu.com
|
||||||
zpb365.com
|
zpb365.com
|
||||||
zrblog.net
|
|
||||||
zsxq.com
|
|
||||||
zuhaowan.com
|
zuhaowan.com
|
||||||
zuidaima.com
|
|
||||||
zuowen.com
|
zuowen.com
|
||||||
zuowen8.com
|
zuowen8.com
|
||||||
zuowenwang.net
|
zuowenwang.net
|
||||||
@@ -1593,3 +1620,6 @@ ao-x.ac.cn
|
|||||||
|
|
||||||
# 万集科技 京ICP备18036282号-2
|
# 万集科技 京ICP备18036282号-2
|
||||||
wanji.net.cn
|
wanji.net.cn
|
||||||
|
|
||||||
|
# 广州市雅望互联网服务有限公司
|
||||||
|
gzyowin.com
|
||||||
|
|||||||
@@ -1,5 +1,3 @@
|
|||||||
|
esm.run
|
||||||
jsdelivr.com
|
jsdelivr.com
|
||||||
jsdelivr.net
|
jsdelivr.net
|
||||||
esm.run
|
|
||||||
|
|
||||||
full:cdn.jsdelivr.net
|
|
||||||
|
|||||||
@@ -1,2 +1,5 @@
|
|||||||
|
calorietech.com
|
||||||
gotokeep.com
|
gotokeep.com
|
||||||
|
keep.com
|
||||||
|
keep.com.cn
|
||||||
keepcdn.com
|
keepcdn.com
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ kinopub.online
|
|||||||
kpdl.link
|
kpdl.link
|
||||||
|
|
||||||
# Mirror sites
|
# Mirror sites
|
||||||
|
ahc.ovh # sub domains mirror
|
||||||
gfw.ovh # sub domains mirror
|
gfw.ovh # sub domains mirror
|
||||||
mos-gorsud.co # kinopub domain to generate a mirror site through gfw.ovh
|
mos-gorsud.co # kinopub domain to generate a mirror site through gfw.ovh
|
||||||
|
|
||||||
|
|||||||
@@ -1 +0,0 @@
|
|||||||
knovel.com
|
|
||||||
@@ -32,6 +32,7 @@ static163.net
|
|||||||
ydstatic.com
|
ydstatic.com
|
||||||
yeah.net
|
yeah.net
|
||||||
youdao.com
|
youdao.com
|
||||||
|
yunxindns.com
|
||||||
yunxinfw.com
|
yunxinfw.com
|
||||||
zhuanzfx.com
|
zhuanzfx.com
|
||||||
|
|
||||||
|
|||||||
@@ -1 +0,0 @@
|
|||||||
nixos.org
|
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
22112211.xyz
|
22112211.xyz
|
||||||
deepflood.com
|
deepflood.com
|
||||||
|
nodeget.com
|
||||||
nodeimage.com
|
nodeimage.com
|
||||||
nodequality.com
|
nodequality.com
|
||||||
nodeseek.com
|
nodeseek.com
|
||||||
|
|||||||
@@ -59,6 +59,7 @@ tegrazone.com
|
|||||||
tegrazone.jp
|
tegrazone.jp
|
||||||
tegrazone.kr
|
tegrazone.kr
|
||||||
|
|
||||||
|
full:nvidia.custhelp.com
|
||||||
full:nvidia.tt.omtrdc.net
|
full:nvidia.tt.omtrdc.net
|
||||||
|
|
||||||
# NVIDIA 文件下载服务器中国镜像
|
# NVIDIA 文件下载服务器中国镜像
|
||||||
|
|||||||
2
data/openrec
Normal file
2
data/openrec
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
full:dqd0jw5gvbchn.cloudfront.net
|
||||||
|
openrec.tv
|
||||||
@@ -1,10 +1,14 @@
|
|||||||
# All .oracle domains
|
# All .oracle domains
|
||||||
oracle
|
oracle
|
||||||
|
|
||||||
|
include:addthis
|
||||||
|
include:java
|
||||||
|
|
||||||
ateam-oracle.com
|
ateam-oracle.com
|
||||||
bronto.com
|
bronto.com
|
||||||
covid19-rx.org
|
covid19-rx.org
|
||||||
covid19rx.org
|
covid19rx.org
|
||||||
|
custhelp.com
|
||||||
oracle.com
|
oracle.com
|
||||||
oraclecloud.com
|
oraclecloud.com
|
||||||
oraclefoundation.org
|
oraclefoundation.org
|
||||||
@@ -12,6 +16,3 @@ oracleimg.com
|
|||||||
oracleinfinity.io
|
oracleinfinity.io
|
||||||
sun.com
|
sun.com
|
||||||
virtualbox.org
|
virtualbox.org
|
||||||
|
|
||||||
include:addthis
|
|
||||||
include:java
|
|
||||||
|
|||||||
@@ -1,3 +1,10 @@
|
|||||||
|
ozon.by
|
||||||
|
ozon.com
|
||||||
|
ozon.com.by
|
||||||
|
ozon.com.kz
|
||||||
|
ozon.kz
|
||||||
ozon.ru
|
ozon.ru
|
||||||
|
ozon.tm
|
||||||
ozone.ru
|
ozone.ru
|
||||||
|
ozonru.me
|
||||||
ozonusercontent.com
|
ozonusercontent.com
|
||||||
|
|||||||
@@ -1 +0,0 @@
|
|||||||
piwheels.org
|
|
||||||
30
data/qcloud
30
data/qcloud
@@ -258,13 +258,14 @@ tdnsv14.net
|
|||||||
tdnsv15.net
|
tdnsv15.net
|
||||||
|
|
||||||
# myqcloud inside mainland China
|
# myqcloud inside mainland China
|
||||||
regexp:\.(.+-)?ap-beijing(-.+)?\.myqcloud\.com$ #北京
|
# overrided by myqcloud.com
|
||||||
regexp:\.(.+-)?ap-nanjing(-.+)?\.myqcloud\.com$ #南京
|
#regexp:\.(.+-)?ap-beijing(-.+)?\.myqcloud\.com$ #北京
|
||||||
regexp:\.(.+-)?ap-shanghai(-.+)?\.myqcloud\.com$ #上海
|
#regexp:\.(.+-)?ap-nanjing(-.+)?\.myqcloud\.com$ #南京
|
||||||
regexp:\.(.+-)?ap-guangzhou(-.+)?\.myqcloud\.com$ #广州
|
#regexp:\.(.+-)?ap-shanghai(-.+)?\.myqcloud\.com$ #上海
|
||||||
regexp:\.(.+-)?ap-chengdu(-.+)?\.myqcloud\.com$ #成都
|
#regexp:\.(.+-)?ap-guangzhou(-.+)?\.myqcloud\.com$ #广州
|
||||||
regexp:\.(.+-)?ap-chongqing(-.+)?\.myqcloud\.com$ #重庆
|
#regexp:\.(.+-)?ap-chengdu(-.+)?\.myqcloud\.com$ #成都
|
||||||
regexp:\.(.+-)?ap-shenzhen(-.+)?\.myqcloud\.com$ #深圳
|
#regexp:\.(.+-)?ap-chongqing(-.+)?\.myqcloud\.com$ #重庆
|
||||||
|
#regexp:\.(.+-)?ap-shenzhen(-.+)?\.myqcloud\.com$ #深圳
|
||||||
|
|
||||||
# COS 使用到的非中国大陆的地域与可用区,参见 https://cloud.tencent.com/document/product/436/6224
|
# COS 使用到的非中国大陆的地域与可用区,参见 https://cloud.tencent.com/document/product/436/6224
|
||||||
ap-hongkong.myqcloud.com @!cn #中国香港
|
ap-hongkong.myqcloud.com @!cn #中国香港
|
||||||
@@ -282,13 +283,14 @@ eu-frankfurt.myqcloud.com @!cn #法兰克福
|
|||||||
eu-moscow.myqcloud.com @!cn #莫斯科
|
eu-moscow.myqcloud.com @!cn #莫斯科
|
||||||
|
|
||||||
# tencentcos inside mainland China
|
# tencentcos inside mainland China
|
||||||
regexp:\.(.+-)?ap-beijing(-.+)?\.tencentcos\.(cn|com(\.cn)?)$ #北京
|
# overrided by tencentcos.cn, tencentcos.com, tencentcos.com.cn
|
||||||
regexp:\.(.+-)?ap-nanjing(-.+)?\.tencentcos\.(cn|com(\.cn)?)$ #南京
|
#regexp:\.(.+-)?ap-beijing(-.+)?\.tencentcos\.(cn|com(\.cn)?)$ #北京
|
||||||
regexp:\.(.+-)?ap-shanghai(-.+)?\.tencentcos\.(cn|com(\.cn)?)$ #上海
|
#regexp:\.(.+-)?ap-nanjing(-.+)?\.tencentcos\.(cn|com(\.cn)?)$ #南京
|
||||||
regexp:\.(.+-)?ap-guangzhou(-.+)?\.tencentcos\.(cn|com(\.cn)?)$ #广州
|
#regexp:\.(.+-)?ap-shanghai(-.+)?\.tencentcos\.(cn|com(\.cn)?)$ #上海
|
||||||
regexp:\.(.+-)?ap-chengdu(-.+)?\.tencentcos\.(cn|com(\.cn)?)$ #成都
|
#regexp:\.(.+-)?ap-guangzhou(-.+)?\.tencentcos\.(cn|com(\.cn)?)$ #广州
|
||||||
regexp:\.(.+-)?ap-chongqing(-.+)?\.tencentcos\.(cn|com(\.cn)?)$ #重庆
|
#regexp:\.(.+-)?ap-chengdu(-.+)?\.tencentcos\.(cn|com(\.cn)?)$ #成都
|
||||||
regexp:\.(.+-)?ap-shenzhen(-.+)?\.tencentcos\.(cn|com(\.cn)?)$ #深圳
|
#regexp:\.(.+-)?ap-chongqing(-.+)?\.tencentcos\.(cn|com(\.cn)?)$ #重庆
|
||||||
|
#regexp:\.(.+-)?ap-shenzhen(-.+)?\.tencentcos\.(cn|com(\.cn)?)$ #深圳
|
||||||
|
|
||||||
# tencentcos outside mainland China
|
# tencentcos outside mainland China
|
||||||
# regexp:.+\.ap-hongkong\.tencentcos\.(cn|com(\.cn)?)$ @!cn #中国香港
|
# regexp:.+\.ap-hongkong\.tencentcos\.(cn|com(\.cn)?)$ @!cn #中国香港
|
||||||
|
|||||||
@@ -1 +0,0 @@
|
|||||||
remirepo.net
|
|
||||||
@@ -19,7 +19,9 @@ samsungeshop.com.cn @cn
|
|||||||
samsunggalaxyfriends.com
|
samsunggalaxyfriends.com
|
||||||
samsunghealth.com
|
samsunghealth.com
|
||||||
samsungiotcloud.com
|
samsungiotcloud.com
|
||||||
|
samsungiots.com
|
||||||
samsungknox.com
|
samsungknox.com
|
||||||
samsungosp.com
|
samsungosp.com
|
||||||
samsungqbe.com
|
samsungqbe.com
|
||||||
samsungrs.com
|
samsungrs.com
|
||||||
|
smartthings.com
|
||||||
|
|||||||
@@ -9,6 +9,10 @@ itc.cn
|
|||||||
sohu.com
|
sohu.com
|
||||||
sohucs.com
|
sohucs.com
|
||||||
|
|
||||||
|
# 56网
|
||||||
|
56.com
|
||||||
|
56img.com
|
||||||
|
|
||||||
# Ads/tracking
|
# Ads/tracking
|
||||||
adnet.sohu.com @ads
|
adnet.sohu.com @ads
|
||||||
ads.sohu.com @ads
|
ads.sohu.com @ads
|
||||||
|
|||||||
5
data/tilda
Normal file
5
data/tilda
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
tilda.cc
|
||||||
|
tilda.ru
|
||||||
|
tilda.ws
|
||||||
|
tildaapi.com
|
||||||
|
tildacdn.com
|
||||||
@@ -1 +0,0 @@
|
|||||||
topcoder.com
|
|
||||||
@@ -1,3 +1,4 @@
|
|||||||
feng.com
|
feng.com
|
||||||
fengimg.com
|
fengimg.com
|
||||||
|
weiphone.net
|
||||||
wfdata.club
|
wfdata.club
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
videopress.com
|
videopress.com
|
||||||
w.org
|
w.org
|
||||||
wordpress.com
|
wordpress.com
|
||||||
|
wordpress.net
|
||||||
wordpress.org
|
wordpress.org
|
||||||
wordpress.tv
|
wordpress.tv
|
||||||
wp-themes.com
|
wp-themes.com
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
8uri.cn
|
||||||
|
kanimg.com
|
||||||
sandai.net
|
sandai.net
|
||||||
thunderurl.com
|
thunderurl.com
|
||||||
xunlei.com
|
xunlei.com
|
||||||
|
|||||||
332
main.go
332
main.go
@@ -2,6 +2,7 @@ package main
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"bufio"
|
"bufio"
|
||||||
|
"encoding/json"
|
||||||
"flag"
|
"flag"
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
@@ -19,6 +20,7 @@ var (
|
|||||||
dataPath = flag.String("datapath", "./data", "Path to your custom 'data' directory")
|
dataPath = flag.String("datapath", "./data", "Path to your custom 'data' directory")
|
||||||
outputName = flag.String("outputname", "dlc.dat", "Name of the generated dat file")
|
outputName = flag.String("outputname", "dlc.dat", "Name of the generated dat file")
|
||||||
outputDir = flag.String("outputdir", "./", "Directory to place all generated files")
|
outputDir = flag.String("outputdir", "./", "Directory to place all generated files")
|
||||||
|
datProfile = flag.String("datprofile", "", "Path of config file used to assemble custom dats")
|
||||||
exportLists = flag.String("exportlists", "", "Lists to be flattened and exported in plaintext format, separated by ',' comma")
|
exportLists = flag.String("exportlists", "", "Lists to be flattened and exported in plaintext format, separated by ',' comma")
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -47,7 +49,24 @@ type Processor struct {
|
|||||||
cirIncMap map[string]bool
|
cirIncMap map[string]bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func makeProtoList(listName string, entries []*Entry) (*router.GeoSite, error) {
|
type GeoSites struct {
|
||||||
|
Sites []*router.GeoSite
|
||||||
|
SiteIdx map[string]int
|
||||||
|
}
|
||||||
|
|
||||||
|
type DatTask struct {
|
||||||
|
Name string `json:"name"`
|
||||||
|
Mode string `json:"mode"`
|
||||||
|
Lists []string `json:"lists"`
|
||||||
|
}
|
||||||
|
|
||||||
|
const (
|
||||||
|
ModeAll string = "all"
|
||||||
|
ModeAllowlist string = "allowlist"
|
||||||
|
ModeDenylist string = "denylist"
|
||||||
|
)
|
||||||
|
|
||||||
|
func makeProtoList(listName string, entries []*Entry) *router.GeoSite {
|
||||||
site := &router.GeoSite{
|
site := &router.GeoSite{
|
||||||
CountryCode: listName,
|
CountryCode: listName,
|
||||||
Domain: make([]*router.Domain, 0, len(entries)),
|
Domain: make([]*router.Domain, 0, len(entries)),
|
||||||
@@ -73,7 +92,91 @@ func makeProtoList(listName string, entries []*Entry) (*router.GeoSite, error) {
|
|||||||
}
|
}
|
||||||
site.Domain = append(site.Domain, pdomain)
|
site.Domain = append(site.Domain, pdomain)
|
||||||
}
|
}
|
||||||
return site, nil
|
return site
|
||||||
|
}
|
||||||
|
|
||||||
|
func loadTasks(path string) ([]DatTask, error) {
|
||||||
|
f, err := os.Open(path)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
defer f.Close()
|
||||||
|
|
||||||
|
var tasks []DatTask
|
||||||
|
dec := json.NewDecoder(f)
|
||||||
|
if err := dec.Decode(&tasks); err != nil {
|
||||||
|
return nil, fmt.Errorf("failed to decode json: %w", err)
|
||||||
|
}
|
||||||
|
for i, t := range tasks {
|
||||||
|
if t.Name == "" {
|
||||||
|
return nil, fmt.Errorf("task[%d]: name is required", i)
|
||||||
|
}
|
||||||
|
switch t.Mode {
|
||||||
|
case ModeAll, ModeAllowlist, ModeDenylist:
|
||||||
|
default:
|
||||||
|
return nil, fmt.Errorf("task[%d] %q: invalid mode %q", i, t.Name, t.Mode)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return tasks, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (gs *GeoSites) assembleDat(task DatTask) error {
|
||||||
|
datFileName := strings.ToLower(filepath.Base(task.Name))
|
||||||
|
geoSiteList := new(router.GeoSiteList)
|
||||||
|
|
||||||
|
switch task.Mode {
|
||||||
|
case ModeAll:
|
||||||
|
geoSiteList.Entry = gs.Sites
|
||||||
|
case ModeAllowlist:
|
||||||
|
allowedIdxes := make([]int, 0, len(task.Lists))
|
||||||
|
for _, list := range task.Lists {
|
||||||
|
if idx, ok := gs.SiteIdx[strings.ToUpper(list)]; ok {
|
||||||
|
allowedIdxes = append(allowedIdxes, idx)
|
||||||
|
} else {
|
||||||
|
return fmt.Errorf("list %q not found for allowlist task", list)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
slices.Sort(allowedIdxes)
|
||||||
|
allowedlen := len(allowedIdxes)
|
||||||
|
if allowedlen == 0 {
|
||||||
|
return fmt.Errorf("allowlist needs at least one valid list")
|
||||||
|
}
|
||||||
|
geoSiteList.Entry = make([]*router.GeoSite, allowedlen)
|
||||||
|
for i, idx := range allowedIdxes {
|
||||||
|
geoSiteList.Entry[i] = gs.Sites[idx]
|
||||||
|
}
|
||||||
|
case ModeDenylist:
|
||||||
|
deniedMap := make(map[int]bool, len(task.Lists))
|
||||||
|
for _, list := range task.Lists {
|
||||||
|
if idx, ok := gs.SiteIdx[strings.ToUpper(list)]; ok {
|
||||||
|
deniedMap[idx] = true
|
||||||
|
} else {
|
||||||
|
fmt.Printf("[Warn] list %q not found in denylist task %q", list, task.Name)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
deniedlen := len(deniedMap)
|
||||||
|
if deniedlen == 0 {
|
||||||
|
fmt.Printf("[Warn] nothing to deny in task %q", task.Name)
|
||||||
|
geoSiteList.Entry = gs.Sites
|
||||||
|
} else {
|
||||||
|
geoSiteList.Entry = make([]*router.GeoSite, 0, len(gs.Sites)-deniedlen)
|
||||||
|
for i, site := range gs.Sites {
|
||||||
|
if !deniedMap[i] {
|
||||||
|
geoSiteList.Entry = append(geoSiteList.Entry, site)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protoBytes, err := proto.Marshal(geoSiteList)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("failed to marshal: %w", err)
|
||||||
|
}
|
||||||
|
if err := os.WriteFile(filepath.Join(*outputDir, datFileName), protoBytes, 0644); err != nil {
|
||||||
|
return fmt.Errorf("failed to write file %q: %w", datFileName, err)
|
||||||
|
}
|
||||||
|
fmt.Printf("dat %q has been generated successfully\n", datFileName)
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func writePlainList(listname string, entries []*Entry) error {
|
func writePlainList(listname string, entries []*Entry) error {
|
||||||
@@ -89,46 +192,28 @@ func writePlainList(listname string, entries []*Entry) error {
|
|||||||
return w.Flush()
|
return w.Flush()
|
||||||
}
|
}
|
||||||
|
|
||||||
func parseEntry(line string) (*Entry, []string, error) {
|
func parseEntry(typ, rule string) (*Entry, []string, error) {
|
||||||
entry := new(Entry)
|
entry := &Entry{Type: typ}
|
||||||
parts := strings.Fields(line)
|
parts := strings.Fields(rule)
|
||||||
if len(parts) == 0 {
|
if len(parts) == 0 {
|
||||||
return entry, nil, fmt.Errorf("empty line")
|
return entry, nil, fmt.Errorf("empty domain rule")
|
||||||
}
|
}
|
||||||
|
// Parse value
|
||||||
// Parse type and value
|
switch entry.Type {
|
||||||
typ, val, isTypeSpecified := strings.Cut(parts[0], ":")
|
case dlc.RuleTypeRegexp:
|
||||||
typ = strings.ToLower(typ)
|
if _, err := regexp.Compile(parts[0]); err != nil {
|
||||||
if !isTypeSpecified { // Default RuleType
|
return entry, nil, fmt.Errorf("invalid regexp %q: %w", parts[0], err)
|
||||||
if !validateDomainChars(typ) {
|
|
||||||
return entry, nil, fmt.Errorf("invalid domain: %q", typ)
|
|
||||||
}
|
}
|
||||||
entry.Type = dlc.RuleTypeDomain
|
entry.Value = parts[0]
|
||||||
entry.Value = typ
|
case dlc.RuleTypeDomain, dlc.RuleTypeFullDomain, dlc.RuleTypeKeyword:
|
||||||
} else {
|
entry.Value = strings.ToLower(parts[0])
|
||||||
switch typ {
|
if !validateDomainChars(entry.Value) {
|
||||||
case dlc.RuleTypeRegexp:
|
return entry, nil, fmt.Errorf("invalid domain: %q", entry.Value)
|
||||||
if _, err := regexp.Compile(val); err != nil {
|
|
||||||
return entry, nil, fmt.Errorf("invalid regexp %q: %w", val, err)
|
|
||||||
}
|
|
||||||
entry.Type = dlc.RuleTypeRegexp
|
|
||||||
entry.Value = val
|
|
||||||
case dlc.RuleTypeInclude:
|
|
||||||
entry.Type = dlc.RuleTypeInclude
|
|
||||||
entry.Value = strings.ToUpper(val)
|
|
||||||
if !validateSiteName(entry.Value) {
|
|
||||||
return entry, nil, fmt.Errorf("invalid included list name: %q", entry.Value)
|
|
||||||
}
|
|
||||||
case dlc.RuleTypeDomain, dlc.RuleTypeFullDomain, dlc.RuleTypeKeyword:
|
|
||||||
entry.Type = typ
|
|
||||||
entry.Value = strings.ToLower(val)
|
|
||||||
if !validateDomainChars(entry.Value) {
|
|
||||||
return entry, nil, fmt.Errorf("invalid domain: %q", entry.Value)
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
return entry, nil, fmt.Errorf("invalid type: %q", typ)
|
|
||||||
}
|
}
|
||||||
|
default:
|
||||||
|
return entry, nil, fmt.Errorf("unknown rule type: %q", entry.Type)
|
||||||
}
|
}
|
||||||
|
plen := len(entry.Type) + len(entry.Value) + 1
|
||||||
|
|
||||||
// Parse attributes and affiliations
|
// Parse attributes and affiliations
|
||||||
var affs []string
|
var affs []string
|
||||||
@@ -140,6 +225,7 @@ func parseEntry(line string) (*Entry, []string, error) {
|
|||||||
return entry, affs, fmt.Errorf("invalid attribute: %q", attr)
|
return entry, affs, fmt.Errorf("invalid attribute: %q", attr)
|
||||||
}
|
}
|
||||||
entry.Attrs = append(entry.Attrs, attr)
|
entry.Attrs = append(entry.Attrs, attr)
|
||||||
|
plen += 2 + len(attr)
|
||||||
case '&':
|
case '&':
|
||||||
aff := strings.ToUpper(part[1:])
|
aff := strings.ToUpper(part[1:])
|
||||||
if !validateSiteName(aff) {
|
if !validateSiteName(aff) {
|
||||||
@@ -147,33 +233,70 @@ func parseEntry(line string) (*Entry, []string, error) {
|
|||||||
}
|
}
|
||||||
affs = append(affs, aff)
|
affs = append(affs, aff)
|
||||||
default:
|
default:
|
||||||
return entry, affs, fmt.Errorf("invalid attribute/affiliation: %q", part)
|
return entry, affs, fmt.Errorf("unknown field: %q", part)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if entry.Type != dlc.RuleTypeInclude {
|
slices.Sort(entry.Attrs) // Sort attributes
|
||||||
slices.Sort(entry.Attrs) // Sort attributes
|
// Formated plain entry: type:domain.tld:@attr1,@attr2
|
||||||
// Formated plain entry: type:domain.tld:@attr1,@attr2
|
var plain strings.Builder
|
||||||
var plain strings.Builder
|
plain.Grow(plen)
|
||||||
plain.Grow(len(entry.Type) + len(entry.Value) + 10)
|
plain.WriteString(entry.Type)
|
||||||
plain.WriteString(entry.Type)
|
plain.WriteByte(':')
|
||||||
plain.WriteByte(':')
|
plain.WriteString(entry.Value)
|
||||||
plain.WriteString(entry.Value)
|
for i, attr := range entry.Attrs {
|
||||||
for i, attr := range entry.Attrs {
|
if i == 0 {
|
||||||
if i == 0 {
|
plain.WriteByte(':')
|
||||||
plain.WriteByte(':')
|
} else {
|
||||||
} else {
|
plain.WriteByte(',')
|
||||||
plain.WriteByte(',')
|
|
||||||
}
|
|
||||||
plain.WriteByte('@')
|
|
||||||
plain.WriteString(attr)
|
|
||||||
}
|
}
|
||||||
entry.Plain = plain.String()
|
plain.WriteByte('@')
|
||||||
|
plain.WriteString(attr)
|
||||||
}
|
}
|
||||||
|
entry.Plain = plain.String()
|
||||||
return entry, affs, nil
|
return entry, affs, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func parseInclusion(rule string) (*Inclusion, error) {
|
||||||
|
parts := strings.Fields(rule)
|
||||||
|
if len(parts) == 0 {
|
||||||
|
return nil, fmt.Errorf("empty inclusion")
|
||||||
|
}
|
||||||
|
inc := &Inclusion{Source: strings.ToUpper(parts[0])}
|
||||||
|
if !validateSiteName(inc.Source) {
|
||||||
|
return inc, fmt.Errorf("invalid included list name: %q", inc.Source)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Parse attributes
|
||||||
|
for _, part := range parts[1:] {
|
||||||
|
switch part[0] {
|
||||||
|
case '@':
|
||||||
|
attr := strings.ToLower(part[1:])
|
||||||
|
if attr[0] == '-' {
|
||||||
|
battr := attr[1:]
|
||||||
|
if !validateAttrChars(battr) {
|
||||||
|
return inc, fmt.Errorf("invalid ban attribute: %q", battr)
|
||||||
|
}
|
||||||
|
inc.BanAttrs = append(inc.BanAttrs, battr)
|
||||||
|
} else {
|
||||||
|
if !validateAttrChars(attr) {
|
||||||
|
return inc, fmt.Errorf("invalid must attribute: %q", attr)
|
||||||
|
}
|
||||||
|
inc.MustAttrs = append(inc.MustAttrs, attr)
|
||||||
|
}
|
||||||
|
case '&':
|
||||||
|
return inc, fmt.Errorf("affiliation is not allowed for inclusion")
|
||||||
|
default:
|
||||||
|
return inc, fmt.Errorf("unknown field: %q", part)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return inc, nil
|
||||||
|
}
|
||||||
|
|
||||||
func validateDomainChars(domain string) bool {
|
func validateDomainChars(domain string) bool {
|
||||||
|
if domain == "" {
|
||||||
|
return false
|
||||||
|
}
|
||||||
for i := range domain {
|
for i := range domain {
|
||||||
c := domain[i]
|
c := domain[i]
|
||||||
if (c >= 'a' && c <= 'z') || (c >= '0' && c <= '9') || c == '.' || c == '-' {
|
if (c >= 'a' && c <= 'z') || (c >= '0' && c <= '9') || c == '.' || c == '-' {
|
||||||
@@ -185,9 +308,12 @@ func validateDomainChars(domain string) bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func validateAttrChars(attr string) bool {
|
func validateAttrChars(attr string) bool {
|
||||||
|
if attr == "" {
|
||||||
|
return false
|
||||||
|
}
|
||||||
for i := range attr {
|
for i := range attr {
|
||||||
c := attr[i]
|
c := attr[i]
|
||||||
if (c >= 'a' && c <= 'z') || (c >= '0' && c <= '9') || c == '!' || c == '-' {
|
if (c >= 'a' && c <= 'z') || (c >= '0' && c <= '9') || c == '!' {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
@@ -196,6 +322,9 @@ func validateAttrChars(attr string) bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func validateSiteName(name string) bool {
|
func validateSiteName(name string) bool {
|
||||||
|
if name == "" {
|
||||||
|
return false
|
||||||
|
}
|
||||||
for i := range name {
|
for i := range name {
|
||||||
c := name[i]
|
c := name[i]
|
||||||
if (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9') || c == '!' || c == '-' {
|
if (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9') || c == '!' || c == '-' {
|
||||||
@@ -232,26 +361,23 @@ func (p *Processor) loadData(listName string, path string) error {
|
|||||||
if line == "" {
|
if line == "" {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
entry, affs, err := parseEntry(line)
|
typ, rule, isTypeSpecified := strings.Cut(line, ":")
|
||||||
if err != nil {
|
if !isTypeSpecified { // Default RuleType
|
||||||
return fmt.Errorf("error in %q at line %d: %w", path, lineIdx, err)
|
typ, rule = dlc.RuleTypeDomain, typ
|
||||||
|
} else {
|
||||||
|
typ = strings.ToLower(typ)
|
||||||
}
|
}
|
||||||
|
if typ == dlc.RuleTypeInclude {
|
||||||
if entry.Type == dlc.RuleTypeInclude {
|
inc, err := parseInclusion(rule)
|
||||||
inc := &Inclusion{Source: entry.Value}
|
if err != nil {
|
||||||
for _, attr := range entry.Attrs {
|
return fmt.Errorf("error in %q at line %d: %w", path, lineIdx, err)
|
||||||
if attr[0] == '-' {
|
|
||||||
inc.BanAttrs = append(inc.BanAttrs, attr[1:])
|
|
||||||
} else {
|
|
||||||
inc.MustAttrs = append(inc.MustAttrs, attr)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for _, aff := range affs {
|
|
||||||
apl := p.getOrCreateParsedList(aff)
|
|
||||||
apl.Inclusions = append(apl.Inclusions, inc)
|
|
||||||
}
|
}
|
||||||
pl.Inclusions = append(pl.Inclusions, inc)
|
pl.Inclusions = append(pl.Inclusions, inc)
|
||||||
} else {
|
} else {
|
||||||
|
entry, affs, err := parseEntry(typ, rule)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("error in %q at line %d: %w", path, lineIdx, err)
|
||||||
|
}
|
||||||
for _, aff := range affs {
|
for _, aff := range affs {
|
||||||
apl := p.getOrCreateParsedList(aff)
|
apl := p.getOrCreateParsedList(aff)
|
||||||
apl.Entries = append(apl.Entries, entry)
|
apl.Entries = append(apl.Entries, entry)
|
||||||
@@ -259,7 +385,7 @@ func (p *Processor) loadData(listName string, path string) error {
|
|||||||
pl.Entries = append(pl.Entries, entry)
|
pl.Entries = append(pl.Entries, entry)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return nil
|
return scanner.Err()
|
||||||
}
|
}
|
||||||
|
|
||||||
func isMatchAttrFilters(entry *Entry, incFilter *Inclusion) bool {
|
func isMatchAttrFilters(entry *Entry, incFilter *Inclusion) bool {
|
||||||
@@ -360,6 +486,9 @@ func (p *Processor) resolveList(plname string) error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if len(roughMap) == 0 {
|
||||||
|
return fmt.Errorf("empty list")
|
||||||
|
}
|
||||||
p.finalMap[plname] = polishList(roughMap)
|
p.finalMap[plname] = polishList(roughMap)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@@ -387,13 +516,15 @@ func run() error {
|
|||||||
return fmt.Errorf("failed to loadData: %w", err)
|
return fmt.Errorf("failed to loadData: %w", err)
|
||||||
}
|
}
|
||||||
// Generate finalMap
|
// Generate finalMap
|
||||||
processor.finalMap = make(map[string][]*Entry, len(processor.plMap))
|
sitesCount := len(processor.plMap)
|
||||||
|
processor.finalMap = make(map[string][]*Entry, sitesCount)
|
||||||
processor.cirIncMap = make(map[string]bool)
|
processor.cirIncMap = make(map[string]bool)
|
||||||
for plname := range processor.plMap {
|
for plname := range processor.plMap {
|
||||||
if err := processor.resolveList(plname); err != nil {
|
if err := processor.resolveList(plname); err != nil {
|
||||||
return fmt.Errorf("failed to resolveList %q: %w", plname, err)
|
return fmt.Errorf("failed to resolveList %q: %w", plname, err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
processor.plMap = nil
|
||||||
|
|
||||||
// Make sure output directory exists
|
// Make sure output directory exists
|
||||||
if err := os.MkdirAll(*outputDir, 0755); err != nil {
|
if err := os.MkdirAll(*outputDir, 0755); err != nil {
|
||||||
@@ -403,47 +534,58 @@ func run() error {
|
|||||||
for rawEpList := range strings.SplitSeq(*exportLists, ",") {
|
for rawEpList := range strings.SplitSeq(*exportLists, ",") {
|
||||||
if epList := strings.TrimSpace(rawEpList); epList != "" {
|
if epList := strings.TrimSpace(rawEpList); epList != "" {
|
||||||
entries, exist := processor.finalMap[strings.ToUpper(epList)]
|
entries, exist := processor.finalMap[strings.ToUpper(epList)]
|
||||||
if !exist || len(entries) == 0 {
|
if !exist {
|
||||||
fmt.Printf("list %q does not exist or is empty\n", epList)
|
fmt.Printf("[Warn] list %q does not exist\n", epList)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if err := writePlainList(epList, entries); err != nil {
|
if err := writePlainList(epList, entries); err != nil {
|
||||||
fmt.Printf("failed to write list %q: %v\n", epList, err)
|
fmt.Printf("[Error] failed to write list %q: %v\n", epList, err)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
fmt.Printf("list %q has been generated successfully.\n", epList)
|
fmt.Printf("list %q has been generated successfully\n", epList)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Generate dat file
|
// Generate proto sites
|
||||||
protoList := new(router.GeoSiteList)
|
gs := &GeoSites{
|
||||||
for siteName, siteEntries := range processor.finalMap {
|
Sites: make([]*router.GeoSite, 0, sitesCount),
|
||||||
site, err := makeProtoList(siteName, siteEntries)
|
SiteIdx: make(map[string]int, sitesCount),
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("failed to makeProtoList %q: %w", siteName, err)
|
|
||||||
}
|
|
||||||
protoList.Entry = append(protoList.Entry, site)
|
|
||||||
}
|
}
|
||||||
// Sort protoList so the marshaled list is reproducible
|
for siteName, siteEntries := range processor.finalMap {
|
||||||
slices.SortFunc(protoList.Entry, func(a, b *router.GeoSite) int {
|
gs.Sites = append(gs.Sites, makeProtoList(siteName, siteEntries))
|
||||||
|
}
|
||||||
|
processor = nil
|
||||||
|
// Sort proto sites so the generated file is reproducible
|
||||||
|
slices.SortFunc(gs.Sites, func(a, b *router.GeoSite) int {
|
||||||
return strings.Compare(a.CountryCode, b.CountryCode)
|
return strings.Compare(a.CountryCode, b.CountryCode)
|
||||||
})
|
})
|
||||||
|
for i := range sitesCount {
|
||||||
|
gs.SiteIdx[gs.Sites[i].CountryCode] = i
|
||||||
|
}
|
||||||
|
|
||||||
protoBytes, err := proto.Marshal(protoList)
|
// Load tasks and generate dat files
|
||||||
if err != nil {
|
var tasks []DatTask
|
||||||
return fmt.Errorf("failed to marshal: %w", err)
|
if *datProfile == "" {
|
||||||
|
tasks = []DatTask{{Name: *outputName, Mode: ModeAll}}
|
||||||
|
} else {
|
||||||
|
var err error
|
||||||
|
tasks, err = loadTasks(*datProfile)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("failed to loadTasks %q: %v", *datProfile, err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if err := os.WriteFile(filepath.Join(*outputDir, *outputName), protoBytes, 0644); err != nil {
|
for _, task := range tasks {
|
||||||
return fmt.Errorf("failed to write output: %w", err)
|
if err := gs.assembleDat(task); err != nil {
|
||||||
|
fmt.Printf("[Error] failed to assembleDat %q: %v", task.Name, err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
fmt.Printf("%q has been generated successfully.\n", *outputName)
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
flag.Parse()
|
flag.Parse()
|
||||||
if err := run(); err != nil {
|
if err := run(); err != nil {
|
||||||
fmt.Printf("Fatal error: %v\n", err)
|
fmt.Printf("[Fatal] critical error: %v\n", err)
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user