.
675 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | [](https://github.com/REIJI007/AdBlock_Rule_For_V2ray/blob/main/LICENSE-GPL%203.0)
2 | [](https://github.com/REIJI007/AdBlock_Rule_For_V2ray/blob/main/LICENSE-CC-BY-NC-SA%204.0)
3 |
4 | AdBlock_Rule_For_V2ray
5 |
6 |
7 | 适用于V2ray(V2ray核心与Xray核心)的广告域名拦截adblock.dat二进制文件,每20分钟更新一次
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 | **一、从多个广告过滤器中提取拦截域名条目,删除重复项,并将它们转换为兼容V2ray的dat二进制文件,其中列表的每个条目都写成了形如domain:example.com形式,一行仅一条规则。该列表可以用作V2ray的拦截域名路由文件,以阻止广告域名, powershell脚本和main.go转换程序每20分钟自动执行,并将生成的文件发布在release中.两个文件的下载地址分别如下,其中adblock_reject_domain.txt由powershell脚本生成,adblock.dat则是由main.go转换程序将adblock.txt转化得来的dat二进制文件,该文件仅有一个域名标签```ADBLOCK```**
19 |
20 |
21 |
22 |
41 |
42 |
43 |
44 |
45 | ## 警告:本过滤器订阅有可能破坏某些网站的功能,也有可能封禁某些色情、赌博网站,使用前请斟酌考虑,如有误杀请积极向上游issue反馈,本仓库仅提供去重、筛选、合并功能
46 |
47 |
48 |
49 | **二、可加入此powershell脚本处理的有```adblock plus语法广告过滤器```、```Host拦截列表```、```纯广告域名列表```、```Dnsmasq列表```,请自行酌情添加过滤器订阅URL至powershell脚本中进行处理,你可将该脚本代码复制到本地文本编辑器制作成.ps1后缀的文件运行在powershell上,注意修改生成的文本文件路径,最后在V2ray的json配置中加入被拦截域名,且V2ray配置字段写成类似于如下例子**
50 |
51 |
52 | *简而言之就是可以让你DIY出希望得到的拦截域名列表,缺点是此做法只适合本地定制使用,当然你也可以像本仓库一样部署到GitHub上面,见仁见智*
53 |
54 |
55 |
56 | **三、本仓库引用多个广告过滤器,从这些广告过滤器中提取了被拦截条目的域名,剔除了非拦截项并去重,最后做成adblock.dat二进制文件,虽无法做到面面俱到但能减少广告带来的困扰,请自行斟酌考虑使用。碍于V2ray的路由行为且秉持着尽可能不误杀的原则,本仓库采取域名后缀匹配策略,即匹配命中于拦截列表上的域名或其子域名时触发拦截,除此之外的情况给予放行,尽管这会有许多漏网之鱼的广告被放行**
57 |
58 |
59 |
60 | **四、关于本仓库使用方式:**
61 |
62 | *使用方式一:下载releases中的adblock_reject_domain.txt文件,修改V2ray的json配置中的"routing"字段下的"domain"部分*
63 |
64 |
65 |
66 |
67 | ```conf
68 |
69 | {
70 | "outbounds":
71 | [
72 | {
73 | "protocol": "blackhole",
74 | "tag": "adblock" // 此outboundTag出站配合下面的域名拦截路由
75 | }
76 | ],
77 | "routing":
78 | {
79 | "domainStrategy": "AsIs",
80 | "rules":
81 | [
82 | {
83 | "type": "field",
84 | "domain":
85 | [
86 | "example.com1", // 在这里替换要拦截出站的广告域名,注意最后一个广告条目不用加逗号
87 | "example.com2",
88 | "example.com3"
89 | ],
90 | "outboundTag": "adblock" // 匹配到的域名流量会被导流到名为adblock的outboundTag出站
91 | }
92 | ]
93 | }
94 | }
95 | ```
96 |
97 |
98 | *使用方式二:下载adblock.dat文件到V2ray同目录下,将下面对应格式的配置文件中"outbounds"字段和"routing"字段内容添加到你的json配置文件中,注意"outbounds"与"routing"之间的配合,注意去掉注释,"tag" 值需要保持一致*
99 |
100 |
101 |
102 | ```conf
103 | {
104 | "outbounds":
105 | [
106 | {
107 | "protocol": "blackhole",
108 | "tag": "adblock" // 此 outboundTag 出站配合下面的域名拦截路由
109 | }
110 | ],
111 | "routing":
112 | {
113 | "domainStrategy": "AsIs",
114 | "rules":
115 | [
116 | {
117 | "type": "field",
118 | "domain":
119 | [
120 | "ext:adblock.dat:adblock" // 引用 adblock.dat 文件中的 adblock 标签
121 | ],
122 | "outboundTag": "adblock" // 匹配到的域名流量会被导流到名为 adblock 的 outboundTag 出站
123 | }
124 | ]
125 | }
126 | }
127 | ```
128 |
129 |
130 | **五、关于本仓库的使用效果为什么没有普通广告过滤器效果好的疑问解答:**
131 |
132 | *因为普通的广告过滤器包含域名过滤(拦截广告域名)、路径过滤(例如拦截URL路径中包含/ads/的所有请求)、正则表达式过滤(例如拦截所有包含ads.js或ad.js的URL)、类型过滤(例如只拦截图片资源)、隐藏元素等等多因素作用下使得在广告拦截测试网站中可以取得高分。**但碍于V2ray的路由行为(可参考相关文档)**,本仓库仅提取了被拦截域名进行域名匹配过滤,换言之,本仓库就是一个“删减版”的广告过滤器(仅保留了域名匹配过滤功能,规则数在**15万**条左右),所以最终效果没有广告过滤器效果好*
133 |
134 |
135 |
136 |
137 |
138 | **六、本仓库引用的广告过滤规则来源请查看```Referencing rule sources.txt```(目前107个来源)。至于是否误杀域名完全取决于这些处于上游的广告过滤器的域名拦截行为,若不满意的话可按照第二条在本地使用powershell脚本进行DIY本地定制化拦截域名列表,亦或可以像本仓库一样DIY定制后部署到github上面,或者fork本仓库自行DIY**
139 |
140 |
141 | **七、特别鸣谢**
142 |
143 |
144 |
145 | 1. [v2ray](https://github.com/v2fly/v2ray-core)
146 | 2. [Adguard](https://github.com/AdguardTeam/AdGuardFilters)
147 |
148 |
149 |
150 |
151 |
152 | ## LICENSE
153 | - [CC-BY-SA-4.0 License](https://github.com/REIJI007/AdBlock_Rule_For_V2ray/blob/main/LICENSE-CC-BY-NC-SA%204.0)
154 | - [GPL-3.0 License](https://github.com/REIJI007/AdBlock_Rule_For_V2ray/blob/main/LICENSE-GPL%203.0)
155 |
--------------------------------------------------------------------------------
/Referencing rule sources.txt:
--------------------------------------------------------------------------------
1 | 引用列表如下:
2 |
3 | 1. ADguard Base filter
4 | https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/filter_2_Base/filter.txt
5 |
6 | 2. ADguard Spyware filter
7 | https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/filter_3_Spyware/filter.txt
8 |
9 | 3. ADguard Social filter
10 | https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/filter_4_Social/filter.txt
11 |
12 | 4. ADguard Mobile filter
13 | https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/filter_11_Mobile/filter.txt
14 |
15 | 5. ADguard Annoyances filter
16 | https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/filter_14_Annoyances/filter.txt
17 |
18 | 6. ADguard Dns Filter
19 | https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/filter_15_DnsFilter/filter.txt
20 |
21 | 7. ADguard TrackParam fliter
22 | https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/filter_17_TrackParam/filter.txt
23 |
24 | 8. ADguard Annoyances_Cookies filter
25 | https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/filter_18_Annoyances_Cookies/filter.txt
26 |
27 | 9. ADguard Annoyances_Popups filter
28 | https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/filter_19_Annoyances_Popups/filter.txt
29 |
30 | 10. ADguard Annoyances_MobileApp filter
31 | https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/filter_20_Annoyances_MobileApp/filter.txt
32 |
33 | 11. ADguard Annoyances_Other filter
34 | https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/filter_21_Annoyances_Other/filter.txt
35 |
36 | 12. ADguard Annoyances_Widgets filter
37 | https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/filter_22_Annoyances_Widgets/filter.txt
38 |
39 | 13. ADguard Chinese filter
40 | https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/filter_224_Chinese/filter.txt
41 |
42 | 14. ADguard ThirdParty EasyList
43 | https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/ThirdParty/filter_101_EasyList/filter.txt
44 |
45 | 15. ADguard ThirdParty EasyListChina
46 | https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/ThirdParty/filter_104_EasyListChina/filter.txt
47 |
48 | 16. ADguard ThirdParty EasyPrivacy
49 | https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/ThirdParty/filter_118_EasyPrivacy/filter.txt
50 |
51 | 17. ADguard ThirdParty Fanboy's Annoyance List
52 | https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/ThirdParty/filter_122_FanboysAnnoyances/filter.txt
53 |
54 | 18. ADguard ThirdParty FanboysSocialBlockingList
55 | https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/ThirdParty/filter_123_FanboysSocialBlockingList/filter.txt
56 |
57 | 19. ADguard ThirdParty WebAnnoyancesUltralist
58 | https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/ThirdParty/filter_201_WebAnnoyancesUltralist/filter.txt
59 |
60 | 20. ADguard ThirdParty PeterLowesList
61 | https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/ThirdParty/filter_204_PeterLowesList/filter.txt
62 |
63 | 21. ADguard ThirdParty AdblockWarningRemovalList
64 | https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/ThirdParty/filter_207_AdblockWarningRemovalList/filter.txt
65 |
66 | 22. ADguard ThirdParty Online_Malicious_URL_Blocklist
67 | https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/ThirdParty/filter_208_Online_Malicious_URL_Blocklist/filter.txt
68 |
69 | 23. ADguard ThirdParty ADgkMobileChinalist
70 | https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/ThirdParty/filter_209_ADgkMobileChinalist/filter.txt
71 |
72 | 24. ADguard ThirdParty Spam404
73 | https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/ThirdParty/filter_210_Spam404/filter.txt
74 |
75 | 25. ADguard ThirdParty Anti-Adblock Killer
76 | https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/ThirdParty/filter_211_AntiAdblockKillerReek/filter.txt
77 |
78 | 26. ADguard ThirdParty ChinaListAndEasyList
79 | https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/ThirdParty/filter_219_ChinaListAndEasyList/filter.txt
80 |
81 | 27. ADguard ThirdParty CJXsAnnoyanceList
82 | https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/ThirdParty/filter_220_CJXsAnnoyanceList/filter.txt
83 |
84 | 28. ADguard ThirdParty xinggsf
85 | https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/ThirdParty/filter_228_xinggsf/filter.txt
86 |
87 | 29. ADguard ThirdParty IdontCareAboutCookies
88 | https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/ThirdParty/filter_229_IdontCareAboutCookies/filter.txt
89 |
90 | 30. ADguard ThirdParty FanboyAntifonts
91 | https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/ThirdParty/filter_239_FanboyAntifonts/filter.txt
92 |
93 | 31. ADguard ThirdParty BarbBlock
94 | https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/ThirdParty/filter_240_BarbBlock/filter.txt
95 |
96 | 32. ADguard ThirdParty FanboyCookiemonster
97 | https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/ThirdParty/filter_241_FanboyCookiemonster/filter.txt
98 |
99 | 33. ADguard ThirdParty NoCoin
100 | https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/ThirdParty/filter_242_NoCoin/filter.txt
101 |
102 | 34. ADguard ThirdParty DandelionSproutAnnoyances
103 | https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/ThirdParty/filter_250_DandelionSproutAnnoyances/filter.txt
104 |
105 | 35. ADguard ThirdParty Legitimate_URL_Shortener
106 | https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/ThirdParty/filter_251_LegitimateURLShortener/filter.txt
107 |
108 | 36. ADguard ThirdParty Phishing_URL_Blocklist
109 | https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/ThirdParty/filter_255_Phishing_URL_Blocklist/filter.txt
110 |
111 | 37. ADguard ThirdParty Scam_Blocklist
112 | https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/ThirdParty/filter_256_Scam_Blocklist/filter.txt
113 |
114 | 38. ADguard ThirdParty uBlock_Origin_Badware_risks
115 | https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/ThirdParty/filter_257_uBlock_Origin_Badware_risks/filter.txt
116 |
117 | 39. ADguard Base filter—first-party servers
118 | https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/BaseFilter/sections/adservers_firstparty.txt
119 |
120 | 40. ADguard Base filter—foreign servers
121 | https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/BaseFilter/sections/foreign.txt
122 |
123 | 41. ADguard Base filter cryptominers
124 | https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/BaseFilter/sections/cryptominers.txt
125 |
126 | 42. ADguard Base filter-adservers
127 | https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/BaseFilter/sections/adservers.txt
128 |
129 | 43. ADguard Base filter-adservers_firstparty
130 | https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/BaseFilter/sections/adservers_firstparty.txt
131 |
132 | 44. ADguard Base filter-allowlist
133 | https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/BaseFilter/sections/allowlist.txt
134 |
135 | 45. ADguard Base filter-allowlist_stealth
136 | https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/BaseFilter/sections/allowlist_stealth.txt
137 |
138 | 46. ADguard Base filter-antiadblock
139 | https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/BaseFilter/sections/antiadblock.txt
140 |
141 | 47. ADguard Base filter-replace
142 | https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/BaseFilter/sections/replace.txt
143 |
144 | 48. ADguard Base filter-content_blocker
145 | https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/BaseFilter/sections/content_blocker.txt
146 |
147 | 49. ADguard Exclusion rules
148 | https://raw.githubusercontent.com/AdguardTeam/ADguardSDNSFilter/master/Filters/exclusions.txt
149 |
150 | 50. ADguard Exception rules
151 | https://raw.githubusercontent.com/AdguardTeam/ADguardSDNSFilter/master/Filters/exceptions.txt
152 |
153 | 51. ADguard SDNSFilter rules
154 | https://raw.githubusercontent.com/AdguardTeam/ADguardSDNSFilter/master/Filters/rules.txt
155 |
156 | 52. ADguard Tracking Protection filter — first-party trackers
157 | https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/SpywareFilter/sections/tracking_servers_firstparty.txt
158 |
159 | 53. ADguard Tracking Protection filter — third-party trackers
160 | https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/SpywareFilter/sections/tracking_servers.txt
161 |
162 | 54. ADguard Tracking Protection filter — mobile trackers
163 | https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/SpywareFilter/sections/mobile.txt
164 |
165 | 55. ADguard Social filter-allowlist
166 | https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/SocialFilter/sections/allowlist.txt
167 |
168 | 56. ADguard Social filter-general_elemhide
169 | https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/SocialFilter/sections/general_elemhide.txt
170 |
171 | 57. ADguard Social filter-general_extensions
172 | https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/SocialFilter/sections/general_extensions.txt
173 |
174 | 58. ADguard Social filter-general_url
175 | https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/SocialFilter/sections/general_url.txt
176 |
177 | 59. ADguard Social filter-popups
178 | https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/SocialFilter/sections/popups.txt
179 |
180 | 60. ADguard Social filter-social_trackers
181 | https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/SocialFilter/sections/social_trackers.txt
182 |
183 | 61. ADguard Annoyances filter-cookies_allowlist
184 | https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/AnnoyancesFilter/Cookies/sections/cookies_allowlist.txt
185 |
186 | 62. ADguard Annoyances filter-cookies_general
187 | https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/AnnoyancesFilter/Cookies/sections/cookies_general.txt
188 |
189 | 63. ADguard Annoyances filter-mobile-app_allowlist
190 | https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/AnnoyancesFilter/MobileApp/sections/mobile-app_allowlist.txt
191 |
192 | 64. ADguard Annoyances filter-mobile-app_general
193 | https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/AnnoyancesFilter/MobileApp/sections/mobile-app_general.txt
194 |
195 | 65. ADguard Annoyances filter-popups-antiadblock
196 | https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/AnnoyancesFilter/Popups/sections/antiadblock.txt
197 |
198 | 66. ADguard Annoyances filter-popups-allowlist
199 | https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/AnnoyancesFilter/Popups/sections/popups_allowlist.txt
200 |
201 | 67. ADguard Annoyances filter-popups-general
202 | https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/AnnoyancesFilter/Popups/sections/popups_general.txt
203 |
204 | 68. ADguard Annoyances filter-popups-push-notifications_allowlist
205 | https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/AnnoyancesFilter/Popups/sections/push-notifications_allowlist.txt
206 |
207 | 69. ADguard Annoyances filter-popups-push-notifications_general
208 | https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/AnnoyancesFilter/Popups/sections/push-notifications_general.txt
209 |
210 | 70. ADguard Annoyances filter-popups-subscriptions_allowlist
211 | https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/AnnoyancesFilter/Popups/sections/subscriptions_allowlist.txt
212 |
213 | 71. ADguard Annoyances filter-popups-subscriptions_general
214 | https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/AnnoyancesFilter/Popups/sections/subscriptions_general.txt
215 |
216 | 72. ADguard Annoyances filter-Widgets
217 | https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/AnnoyancesFilter/Widgets/sections/widgets.txt
218 |
219 | 73. ADguard CNAME original trackers list
220 | https://raw.githubusercontent.com/AdguardTeam/cname-trackers/master/data/combined_original_trackers.txt
221 |
222 | 74. ADguard CNAME disguised ads list
223 | https://raw.githubusercontent.com/AdguardTeam/cname-trackers/master/data/combined_disguised_ads.txt
224 |
225 | 75. ADguard CNAME disguised clickthroughs list
226 | https://raw.githubusercontent.com/AdguardTeam/cname-trackers/master/data/combined_disguised_clickthroughs.txt
227 |
228 | 76. ADguard CNAME disguised microsites list
229 | https://raw.githubusercontent.com/AdguardTeam/cname-trackers/master/data/combined_disguised_microsites.txt
230 |
231 | 77. ADguard CNAME disguised trackers list
232 | https://raw.githubusercontent.com/AdguardTeam/cname-trackers/master/data/combined_disguised_trackers.txt
233 |
234 | 78. ADguard CNAME disguised mail_trackers list
235 | https://raw.githubusercontent.com/AdguardTeam/cname-trackers/master/data/combined_disguised_mail_trackers.txt
236 |
237 | 79. ADguard Chinese filter-adservers
238 | https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/ChineseFilter/sections/adservers.txt
239 |
240 | 80. ADguard Chinese filter-adservers_firstparty
241 | https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/ChineseFilter/sections/adservers_firstparty.txt
242 |
243 | 81. ADguard ChineseFilter-allowlist
244 | https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/ChineseFilter/sections/allowlist.txt
245 |
246 | 82. ADguard ChineseFilter-antiadblock
247 | https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/ChineseFilter/sections/antiadblock.txt
248 |
249 | 83. ADguard ChineseFilter-general_elemhide
250 | https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/ChineseFilter/sections/general_elemhide.txt
251 |
252 | 84. ADguard ChineseFilter-general_extensions
253 | https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/ChineseFilter/sections/general_extensions.txt
254 |
255 | 85. ADguard ChineseFilter-general_url
256 | https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/ChineseFilter/sections/general_url.txt
257 |
258 | 86. ADguard ChineseFilter-replace
259 | https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/ChineseFilter/sections/replace.txt
260 |
261 | 87. ADguard Mobile filter-adservers
262 | https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/MobileFilter/sections/adservers.txt
263 |
264 | 88. ADguard MobileFilter-allowlist_app
265 | https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/MobileFilter/sections/allowlist_app.txt
266 |
267 | 89. ADguard MobileFilter-allowlist_web
268 | https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/MobileFilter/sections/allowlist_web.txt
269 |
270 | 90. ADguard MobileFilter-antiadblock
271 | https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/MobileFilter/sections/antiadblock.txt
272 |
273 | 91. ADguard MobileFilter-general_elemhide
274 | https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/MobileFilter/sections/general_elemhide.txt
275 |
276 | 92. ADguard MobileFilter-general_extensions
277 | https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/MobileFilter/sections/general_extensions.txt
278 |
279 | 93. ADguard MobileFilter-general_url
280 | https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/MobileFilter/sections/general_url.txt
281 |
282 | 94. ADguard MobileFilter-replace
283 | https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/MobileFilter/sections/replace.txt
284 |
285 | 95. ADguard SpywareFilter-allowlist
286 | https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/SpywareFilter/sections/allowlist.txt
287 |
288 | 96. ADguard SpywareFilter-cookies_allowlist
289 | https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/SpywareFilter/sections/cookies_allowlist.txt
290 |
291 | 97. ADguard SpywareFilter-cookies_general
292 | https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/SpywareFilter/sections/cookies_general.txt
293 |
294 | 98. ADguard SpywareFilter-cookies_specific
295 | https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/SpywareFilter/sections/cookies_specific.txt
296 |
297 | 99. ADguard SpywareFilter-general_elemhide
298 | https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/SpywareFilter/sections/general_elemhide.txt
299 |
300 | 100. ADguard SpywareFilter-general_extensions
301 | https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/SpywareFilter/sections/general_extensions.txt
302 |
303 | 101. ADguard SpywareFilter-general_url
304 | https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/SpywareFilter/sections/general_url.txt
305 |
306 | 102. ADguard SpywareFilter-mobile
307 | https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/SpywareFilter/sections/mobile.txt
308 |
309 | 103. ADguard SpywareFilter-mobile_allowlist
310 | https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/SpywareFilter/sections/mobile_allowlist.txt
311 |
312 | 104. ADguard SpywareFilter-tracking_servers
313 | https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/SpywareFilter/sections/tracking_servers.txt
314 |
315 | 105. ADguard SpywareFilter-tracking_servers_firstparty
316 | https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/SpywareFilter/sections/tracking_servers_firstparty.txt
317 |
318 | 106. ADguard TrackParamFilter-allowlist
319 | https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/TrackParamFilter/sections/allowlist.txt
320 |
321 | 107. ADguard TrackParamFilter-general_url
322 | https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/TrackParamFilter/sections/general_url.txt
323 |
--------------------------------------------------------------------------------
/adblock.dat:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/REIJI007/AdBlock_Rule_For_V2ray/b850b2a50f2c1220d2254655ac7b440f2d152f19/adblock.dat
--------------------------------------------------------------------------------
/adblock_rule_generator.ps1:
--------------------------------------------------------------------------------
1 | # Title: AdBlock_Rule_For_V2ray
2 | # Description: 适用于V2ray的域名拦截规则集,每20分钟更新一次,确保即时同步上游减少误杀
3 | # Homepage: https://github.com/REIJI007/AdBlock_Rule_For_V2ray
4 | # LICENSE1: https://github.com/REIJI007/AdBlock_Rule_For_V2ray/blob/main/LICENSE-GPL 3.0
5 | # LICENSE2: https://github.com/REIJI007/AdBlock_Rule_For_V2ray/blob/main/LICENSE-CC-BY-NC-SA 4.0
6 |
7 | # 定义广告过滤器URL列表
8 | $urlList = @(
9 | "https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/filter_2_Base/filter.txt",
10 | "https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/filter_3_Spyware/filter.txt",
11 | "https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/filter_4_Social/filter.txt",
12 | "https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/filter_11_Mobile/filter.txt",
13 | "https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/filter_14_Annoyances/filter.txt",
14 | "https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/filter_15_DnsFilter/filter.txt",
15 | "https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/filter_17_TrackParam/filter.txt",
16 | "https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/filter_18_Annoyances_Cookies/filter.txt",
17 | "https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/filter_19_Annoyances_Popups/filter.txt",
18 | "https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/filter_20_Annoyances_MobileApp/filter.txt",
19 | "https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/filter_21_Annoyances_Other/filter.txt",
20 | "https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/filter_22_Annoyances_Widgets/filter.txt",
21 | "https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/filter_224_Chinese/filter.txt",
22 | "https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/ThirdParty/filter_101_EasyList/filter.txt",
23 | "https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/ThirdParty/filter_104_EasyListChina/filter.txt",
24 | "https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/ThirdParty/filter_118_EasyPrivacy/filter.txt",
25 | "https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/ThirdParty/filter_122_FanboysAnnoyances/filter.txt",
26 | "https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/ThirdParty/filter_123_FanboysSocialBlockingList/filter.txt",
27 | "https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/ThirdParty/filter_201_WebAnnoyancesUltralist/filter.txt",
28 | "https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/ThirdParty/filter_204_PeterLowesList/filter.txt",
29 | "https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/ThirdParty/filter_207_AdblockWarningRemovalList/filter.txt",
30 | "https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/ThirdParty/filter_208_Online_Malicious_URL_Blocklist/filter.txt",
31 | "https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/ThirdParty/filter_209_ADgkMobileChinalist/filter.txt",
32 | "https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/ThirdParty/filter_210_Spam404/filter.txt",
33 | "https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/ThirdParty/filter_211_AntiAdblockKillerReek/filter.txt",
34 | "https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/ThirdParty/filter_219_ChinaListAndEasyList/filter.txt",
35 | "https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/ThirdParty/filter_220_CJXsAnnoyanceList/filter.txt",
36 | "https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/ThirdParty/filter_228_xinggsf/filter.txt",
37 | "https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/ThirdParty/filter_229_IdontCareAboutCookies/filter.txt",
38 | "https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/ThirdParty/filter_239_FanboyAntifonts/filter.txt",
39 | "https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/ThirdParty/filter_240_BarbBlock/filter.txt",
40 | "https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/ThirdParty/filter_241_FanboyCookiemonster/filter.txt",
41 | "https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/ThirdParty/filter_242_NoCoin/filter.txt",
42 | "https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/ThirdParty/filter_250_DandelionSproutAnnoyances/filter.txt",
43 | "https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/ThirdParty/filter_251_LegitimateURLShortener/filter.txt",
44 | "https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/ThirdParty/filter_255_Phishing_URL_Blocklist/filter.txt",
45 | "https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/ThirdParty/filter_256_Scam_Blocklist/filter.txt",
46 | "https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/ThirdParty/filter_257_uBlock_Origin_Badware_risks/filter.txt",
47 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/BaseFilter/sections/adservers_firstparty.txt",
48 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/BaseFilter/sections/foreign.txt",
49 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/BaseFilter/sections/cryptominers.txt",
50 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/BaseFilter/sections/adservers.txt",
51 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/BaseFilter/sections/adservers_firstparty.txt",
52 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/BaseFilter/sections/allowlist.txt",
53 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/BaseFilter/sections/allowlist_stealth.txt",
54 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/BaseFilter/sections/antiadblock.txt",
55 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/BaseFilter/sections/replace.txt",
56 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/BaseFilter/sections/content_blocker.txt",
57 | "https://raw.githubusercontent.com/AdguardTeam/ADguardSDNSFilter/master/Filters/exclusions.txt",
58 | "https://raw.githubusercontent.com/AdguardTeam/ADguardSDNSFilter/master/Filters/exceptions.txt",
59 | "https://raw.githubusercontent.com/AdguardTeam/ADguardSDNSFilter/master/Filters/rules.txt",
60 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/SpywareFilter/sections/tracking_servers_firstparty.txt",
61 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/SpywareFilter/sections/tracking_servers.txt",
62 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/SpywareFilter/sections/mobile.txt",
63 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/SocialFilter/sections/allowlist.txt",
64 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/SocialFilter/sections/general_elemhide.txt",
65 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/SocialFilter/sections/general_extensions.txt",
66 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/SocialFilter/sections/general_url.txt",
67 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/SocialFilter/sections/popups.txt",
68 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/SocialFilter/sections/social_trackers.txt",
69 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/AnnoyancesFilter/Cookies/sections/cookies_allowlist.txt",
70 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/AnnoyancesFilter/Cookies/sections/cookies_general.txt",
71 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/AnnoyancesFilter/MobileApp/sections/mobile-app_allowlist.txt",
72 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/AnnoyancesFilter/MobileApp/sections/mobile-app_general.txt",
73 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/AnnoyancesFilter/Popups/sections/antiadblock.txt",
74 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/AnnoyancesFilter/Popups/sections/popups_allowlist.txt",
75 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/AnnoyancesFilter/Popups/sections/popups_general.txt",
76 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/AnnoyancesFilter/Popups/sections/push-notifications_allowlist.txt",
77 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/AnnoyancesFilter/Popups/sections/push-notifications_general.txt",
78 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/AnnoyancesFilter/Popups/sections/subscriptions_allowlist.txt",
79 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/AnnoyancesFilter/Popups/sections/subscriptions_general.txt",
80 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/AnnoyancesFilter/Widgets/sections/widgets.txt",
81 | "https://raw.githubusercontent.com/AdguardTeam/cname-trackers/master/data/combined_original_trackers.txt",
82 | "https://raw.githubusercontent.com/AdguardTeam/cname-trackers/master/data/combined_disguised_ads.txt",
83 | "https://raw.githubusercontent.com/AdguardTeam/cname-trackers/master/data/combined_disguised_clickthroughs.txt",
84 | "https://raw.githubusercontent.com/AdguardTeam/cname-trackers/master/data/combined_disguised_microsites.txt",
85 | "https://raw.githubusercontent.com/AdguardTeam/cname-trackers/master/data/combined_disguised_trackers.txt",
86 | "https://raw.githubusercontent.com/AdguardTeam/cname-trackers/master/data/combined_disguised_mail_trackers.txt",
87 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/ChineseFilter/sections/adservers.txt",
88 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/ChineseFilter/sections/adservers_firstparty.txt",
89 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/ChineseFilter/sections/allowlist.txt",
90 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/ChineseFilter/sections/antiadblock.txt",
91 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/ChineseFilter/sections/general_elemhide.txt",
92 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/ChineseFilter/sections/general_extensions.txt",
93 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/ChineseFilter/sections/general_url.txt",
94 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/ChineseFilter/sections/replace.txt",
95 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/MobileFilter/sections/adservers.txt",
96 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/MobileFilter/sections/allowlist_app.txt",
97 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/MobileFilter/sections/allowlist_web.txt",
98 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/MobileFilter/sections/antiadblock.txt",
99 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/MobileFilter/sections/general_elemhide.txt",
100 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/MobileFilter/sections/general_extensions.txt",
101 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/MobileFilter/sections/general_url.txt",
102 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/MobileFilter/sections/replace.txt",
103 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/SpywareFilter/sections/allowlist.txt",
104 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/SpywareFilter/sections/cookies_allowlist.txt",
105 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/SpywareFilter/sections/cookies_general.txt",
106 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/SpywareFilter/sections/cookies_specific.txt",
107 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/SpywareFilter/sections/general_elemhide.txt",
108 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/SpywareFilter/sections/general_extensions.txt",
109 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/SpywareFilter/sections/general_url.txt",
110 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/SpywareFilter/sections/mobile.txt",
111 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/SpywareFilter/sections/mobile_allowlist.txt",
112 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/SpywareFilter/sections/tracking_servers.txt",
113 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/SpywareFilter/sections/tracking_servers_firstparty.txt",
114 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/TrackParamFilter/sections/allowlist.txt",
115 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/TrackParamFilter/sections/general_url.txt"
116 | )
117 |
118 | # 日志文件路径
119 | $logFilePath = "$PSScriptRoot/adblock_log.txt"
120 |
121 | # 创建两个HashSet来存储唯一的规则和排除的域名
122 | $uniqueRules = [System.Collections.Generic.HashSet[string]]::new()
123 | $excludedDomains = [System.Collections.Generic.HashSet[string]]::new()
124 |
125 | # 创建WebClient对象用于下载规则
126 | $webClient = New-Object System.Net.WebClient
127 | $webClient.Headers.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36")
128 |
129 | # DNS规范验证函数
130 | function Is-ValidDNSDomain($domain) {
131 | if ($domain.Length -gt 253) { return $false }
132 | $labels = $domain -split "\."
133 | foreach ($label in $labels) {
134 | if ($label.Length -eq 0 -or $label.Length -gt 63) { return $false }
135 | if ($label -notmatch "^[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$") {
136 | return $false
137 | }
138 | }
139 | $tld = $labels[-1]
140 | if ($tld -notmatch "^[a-zA-Z]{2,}$") { return $false }
141 | return $true
142 | }
143 |
144 | foreach ($url in $urlList) {
145 | Write-Host "正在处理: $url"
146 | Add-Content -Path $logFilePath -Value "正在处理: $url"
147 | try {
148 | # 读取并拆分内容为行
149 | $content = $webClient.DownloadString($url)
150 | $lines = $content -split "`n"
151 |
152 | foreach ($line in $lines) {
153 | # 直接处理以 @@ 开头的规则,提取域名并加入白名单
154 | if ($line.StartsWith('@@')) {
155 | $domains = $line -replace '^@@', '' -split '[^\w.-]+'
156 | foreach ($domain in $domains) {
157 | if (-not [string]::IsNullOrWhiteSpace($domain) -and $domain -match '[\w-]+(\.[[\w-]+)+') {
158 | $excludedDomains.Add($domain.Trim()) | Out-Null
159 | }
160 | }
161 | }
162 | else {
163 | # 匹配 Adblock/Easylist 格式的规则
164 | if ($line -match '^\|\|([a-zA-Z0-9.-]+\.[a-zA-Z]{2,})\^$') {
165 | $domain = $Matches[1]
166 | $uniqueRules.Add($domain) | Out-Null
167 | }
168 | # 匹配 Hosts 文件格式的 IPv4 规则
169 | elseif ($line -match '^(0\.0\.0\.0|127\.0\.0\.1)\s+([a-zA-Z0-9.-]+\.[a-zA-Z]{2,})$') {
170 | $domain = $Matches[2]
171 | $uniqueRules.Add($domain) | Out-Null
172 | }
173 | # 匹配 Hosts 文件格式的 IPv6 规则(以 ::1 或 :: 开头)
174 | elseif ($line -match '^::(1)?\s+([a-zA-Z0-9.-]+\.[a-zA-Z]{2,})$') {
175 | $domain = $Matches[2]
176 | $uniqueRules.Add($domain) | Out-Null
177 | }
178 | # 匹配 Dnsmasq address=/域名/格式的规则
179 | elseif ($line -match '^address=/([a-zA-Z0-9.-]+\.[a-zA-Z]{2,})/$') {
180 | $domain = $Matches[1]
181 | $uniqueRules.Add($domain) | Out-Null
182 | }
183 | # 匹配 Dnsmasq server=/域名/的规则
184 | elseif ($line -match '^server=/([a-zA-Z0-9.-]+\.[a-zA-Z]{2,})/$') {
185 | $domain = $Matches[1]
186 | $uniqueRules.Add($domain) | Out-Null
187 | }
188 | # 匹配通配符规则
189 | elseif ($line -match '^\|\|([a-zA-Z0-9.-]+\.[a-zA-Z]{2,})\^$') {
190 | $domain = $Matches[1]
191 | $uniqueRules.Add($domain) | Out-Null
192 | }
193 | # 处理纯域名行
194 | elseif ($line -match '^([a-zA-Z0-9.-]+\.[a-zA-Z]{2,})$') {
195 | $domain = $Matches[1]
196 | $uniqueRules.Add($domain) | Out-Null
197 | }
198 | }
199 | }
200 | }
201 | catch {
202 | Write-Host "处理 $url 时出错: $_"
203 | Add-Content -Path $logFilePath -Value "处理 $url 时出错: $_"
204 | }
205 | }
206 |
207 | # 在写入文件之前进行DNS规范验证
208 | $validRules = [System.Collections.Generic.HashSet[string]]::new()
209 | $validExcludedDomains = [System.Collections.Generic.HashSet[string]]::new()
210 |
211 | foreach ($domain in $uniqueRules) {
212 | if (Is-ValidDNSDomain($domain)) {
213 | $validRules.Add($domain) | Out-Null
214 | }
215 | }
216 |
217 | foreach ($domain in $excludedDomains) {
218 | if (Is-ValidDNSDomain($domain)) {
219 | $validExcludedDomains.Add($domain) | Out-Null
220 | }
221 | }
222 |
223 | # 排除所有白名单规则中的域名
224 | $finalRules = $validRules | Where-Object { -not $validExcludedDomains.Contains($_) }
225 |
226 | # 对规则进行排序
227 | $formattedRules = $finalRules | Sort-Object
228 |
229 | # 统计生成的规则条目数量
230 | $ruleCount = $finalRules.Count
231 |
232 | # 获取当前时间并转换为东八区时间
233 | $generationTime = (Get-Date).ToUniversalTime().AddHours(8).ToString("yyyy-MM-dd HH:mm:ss")
234 |
235 | # 创建文本格式的字符串
236 | $textContent = @"
237 | # Title: AdBlock_Rule_For_V2ray
238 | # Description: 适用于V2ray的域名拦截规则集,每20分钟更新一次,确保即时同步上游减少误杀
239 | # Homepage: https://github.com/REIJI007/AdBlock_Rule_For_V2ray
240 | # LICENSE1: https://github.com/REIJI007/AdBlock_Rule_For_V2ray/blob/main/LICENSE-GPL 3.0
241 | # LICENSE2: https://github.com/REIJI007/AdBlock_Rule_For_V2ray/blob/main/LICENSE-CC-BY-NC-SA 4.0
242 | # Generated on: $generationTime
243 | # Generated AdBlock rules
244 | # Total entries: $ruleCount
245 |
246 | $($formattedRules -join "`n")
247 | "@
248 |
249 | # 定义输出文件路径
250 | $outputPath = "$PSScriptRoot/adblock.txt"
251 | $textContent | Out-File -FilePath $outputPath -Encoding utf8
252 |
253 | # 输出生成的有效规则总数
254 | Write-Host "生成的有效规则总数: $ruleCount"
255 | Add-Content -Path $logFilePath -Value "Total entries: $ruleCount"
256 |
--------------------------------------------------------------------------------
/adblock_rule_generator_domain.ps1:
--------------------------------------------------------------------------------
1 | # Title: AdBlock_Rule_For_V2ray
2 | # Description: 适用于V2ray的域名拦截规则集,每20分钟更新一次,确保即时同步上游减少误杀
3 | # Homepage: https://github.com/REIJI007/AdBlock_Rule_For_V2ray
4 | # LICENSE1: https://github.com/REIJI007/AdBlock_Rule_For_V2ray/blob/main/LICENSE-GPL 3.0
5 | # LICENSE2: https://github.com/REIJI007/AdBlock_Rule_For_V2ray/blob/main/LICENSE-CC-BY-NC-SA 4.0
6 |
7 | # 定义广告过滤器URL列表
8 | $urlList = @(
9 | "https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/filter_2_Base/filter.txt",
10 | "https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/filter_3_Spyware/filter.txt",
11 | "https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/filter_4_Social/filter.txt",
12 | "https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/filter_11_Mobile/filter.txt",
13 | "https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/filter_14_Annoyances/filter.txt",
14 | "https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/filter_15_DnsFilter/filter.txt",
15 | "https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/filter_17_TrackParam/filter.txt",
16 | "https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/filter_18_Annoyances_Cookies/filter.txt",
17 | "https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/filter_19_Annoyances_Popups/filter.txt",
18 | "https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/filter_20_Annoyances_MobileApp/filter.txt",
19 | "https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/filter_21_Annoyances_Other/filter.txt",
20 | "https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/filter_22_Annoyances_Widgets/filter.txt",
21 | "https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/filter_224_Chinese/filter.txt",
22 | "https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/ThirdParty/filter_101_EasyList/filter.txt",
23 | "https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/ThirdParty/filter_104_EasyListChina/filter.txt",
24 | "https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/ThirdParty/filter_118_EasyPrivacy/filter.txt",
25 | "https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/ThirdParty/filter_122_FanboysAnnoyances/filter.txt",
26 | "https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/ThirdParty/filter_123_FanboysSocialBlockingList/filter.txt",
27 | "https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/ThirdParty/filter_201_WebAnnoyancesUltralist/filter.txt",
28 | "https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/ThirdParty/filter_204_PeterLowesList/filter.txt",
29 | "https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/ThirdParty/filter_207_AdblockWarningRemovalList/filter.txt",
30 | "https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/ThirdParty/filter_208_Online_Malicious_URL_Blocklist/filter.txt",
31 | "https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/ThirdParty/filter_209_ADgkMobileChinalist/filter.txt",
32 | "https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/ThirdParty/filter_210_Spam404/filter.txt",
33 | "https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/ThirdParty/filter_211_AntiAdblockKillerReek/filter.txt",
34 | "https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/ThirdParty/filter_219_ChinaListAndEasyList/filter.txt",
35 | "https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/ThirdParty/filter_220_CJXsAnnoyanceList/filter.txt",
36 | "https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/ThirdParty/filter_228_xinggsf/filter.txt",
37 | "https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/ThirdParty/filter_229_IdontCareAboutCookies/filter.txt",
38 | "https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/ThirdParty/filter_239_FanboyAntifonts/filter.txt",
39 | "https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/ThirdParty/filter_240_BarbBlock/filter.txt",
40 | "https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/ThirdParty/filter_241_FanboyCookiemonster/filter.txt",
41 | "https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/ThirdParty/filter_242_NoCoin/filter.txt",
42 | "https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/ThirdParty/filter_250_DandelionSproutAnnoyances/filter.txt",
43 | "https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/ThirdParty/filter_251_LegitimateURLShortener/filter.txt",
44 | "https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/ThirdParty/filter_255_Phishing_URL_Blocklist/filter.txt",
45 | "https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/ThirdParty/filter_256_Scam_Blocklist/filter.txt",
46 | "https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/ThirdParty/filter_257_uBlock_Origin_Badware_risks/filter.txt",
47 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/BaseFilter/sections/adservers_firstparty.txt",
48 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/BaseFilter/sections/foreign.txt",
49 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/BaseFilter/sections/cryptominers.txt",
50 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/BaseFilter/sections/adservers.txt",
51 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/BaseFilter/sections/adservers_firstparty.txt",
52 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/BaseFilter/sections/allowlist.txt",
53 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/BaseFilter/sections/allowlist_stealth.txt",
54 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/BaseFilter/sections/antiadblock.txt",
55 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/BaseFilter/sections/replace.txt",
56 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/BaseFilter/sections/content_blocker.txt",
57 | "https://raw.githubusercontent.com/AdguardTeam/ADguardSDNSFilter/master/Filters/exclusions.txt",
58 | "https://raw.githubusercontent.com/AdguardTeam/ADguardSDNSFilter/master/Filters/exceptions.txt",
59 | "https://raw.githubusercontent.com/AdguardTeam/ADguardSDNSFilter/master/Filters/rules.txt",
60 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/SpywareFilter/sections/tracking_servers_firstparty.txt",
61 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/SpywareFilter/sections/tracking_servers.txt",
62 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/SpywareFilter/sections/mobile.txt",
63 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/SocialFilter/sections/allowlist.txt",
64 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/SocialFilter/sections/general_elemhide.txt",
65 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/SocialFilter/sections/general_extensions.txt",
66 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/SocialFilter/sections/general_url.txt",
67 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/SocialFilter/sections/popups.txt",
68 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/SocialFilter/sections/social_trackers.txt",
69 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/AnnoyancesFilter/Cookies/sections/cookies_allowlist.txt",
70 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/AnnoyancesFilter/Cookies/sections/cookies_general.txt",
71 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/AnnoyancesFilter/MobileApp/sections/mobile-app_allowlist.txt",
72 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/AnnoyancesFilter/MobileApp/sections/mobile-app_general.txt",
73 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/AnnoyancesFilter/Popups/sections/antiadblock.txt",
74 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/AnnoyancesFilter/Popups/sections/popups_allowlist.txt",
75 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/AnnoyancesFilter/Popups/sections/popups_general.txt",
76 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/AnnoyancesFilter/Popups/sections/push-notifications_allowlist.txt",
77 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/AnnoyancesFilter/Popups/sections/push-notifications_general.txt",
78 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/AnnoyancesFilter/Popups/sections/subscriptions_allowlist.txt",
79 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/AnnoyancesFilter/Popups/sections/subscriptions_general.txt",
80 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/AnnoyancesFilter/Widgets/sections/widgets.txt",
81 | "https://raw.githubusercontent.com/AdguardTeam/cname-trackers/master/data/combined_original_trackers.txt",
82 | "https://raw.githubusercontent.com/AdguardTeam/cname-trackers/master/data/combined_disguised_ads.txt",
83 | "https://raw.githubusercontent.com/AdguardTeam/cname-trackers/master/data/combined_disguised_clickthroughs.txt",
84 | "https://raw.githubusercontent.com/AdguardTeam/cname-trackers/master/data/combined_disguised_microsites.txt",
85 | "https://raw.githubusercontent.com/AdguardTeam/cname-trackers/master/data/combined_disguised_trackers.txt",
86 | "https://raw.githubusercontent.com/AdguardTeam/cname-trackers/master/data/combined_disguised_mail_trackers.txt",
87 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/ChineseFilter/sections/adservers.txt",
88 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/ChineseFilter/sections/adservers_firstparty.txt",
89 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/ChineseFilter/sections/allowlist.txt",
90 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/ChineseFilter/sections/antiadblock.txt",
91 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/ChineseFilter/sections/general_elemhide.txt",
92 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/ChineseFilter/sections/general_extensions.txt",
93 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/ChineseFilter/sections/general_url.txt",
94 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/ChineseFilter/sections/replace.txt",
95 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/MobileFilter/sections/adservers.txt",
96 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/MobileFilter/sections/allowlist_app.txt",
97 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/MobileFilter/sections/allowlist_web.txt",
98 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/MobileFilter/sections/antiadblock.txt",
99 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/MobileFilter/sections/general_elemhide.txt",
100 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/MobileFilter/sections/general_extensions.txt",
101 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/MobileFilter/sections/general_url.txt",
102 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/MobileFilter/sections/replace.txt",
103 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/SpywareFilter/sections/allowlist.txt",
104 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/SpywareFilter/sections/cookies_allowlist.txt",
105 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/SpywareFilter/sections/cookies_general.txt",
106 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/SpywareFilter/sections/cookies_specific.txt",
107 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/SpywareFilter/sections/general_elemhide.txt",
108 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/SpywareFilter/sections/general_extensions.txt",
109 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/SpywareFilter/sections/general_url.txt",
110 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/SpywareFilter/sections/mobile.txt",
111 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/SpywareFilter/sections/mobile_allowlist.txt",
112 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/SpywareFilter/sections/tracking_servers.txt",
113 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/SpywareFilter/sections/tracking_servers_firstparty.txt",
114 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/TrackParamFilter/sections/allowlist.txt",
115 | "https://raw.githubusercontent.com/AdguardTeam/ADguardFilters/master/TrackParamFilter/sections/general_url.txt"
116 | )
117 |
118 | # 日志文件路径
119 | $logFilePath = "$PSScriptRoot/adblock_log.txt"
120 |
121 | # 创建两个HashSet来存储唯一的规则和排除的域名
122 | $uniqueRules = [System.Collections.Generic.HashSet[string]]::new()
123 | $excludedDomains = [System.Collections.Generic.HashSet[string]]::new()
124 |
125 | # 创建WebClient对象用于下载规则
126 | $webClient = New-Object System.Net.WebClient
127 | $webClient.Headers.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36")
128 |
129 | # DNS规范验证函数
130 | function Is-ValidDNSDomain($domain) {
131 | if ($domain.Length -gt 253) { return $false }
132 | $labels = $domain -split "\."
133 | foreach ($label in $labels) {
134 | if ($label.Length -eq 0 -or $label.Length -gt 63) { return $false }
135 | if ($label -notmatch "^[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$") {
136 | return $false
137 | }
138 | }
139 | $tld = $labels[-1]
140 | if ($tld -notmatch "^[a-zA-Z]{2,}$") { return $false }
141 | return $true
142 | }
143 |
144 | foreach ($url in $urlList) {
145 | Write-Host "正在处理: $url"
146 | Add-Content -Path $logFilePath -Value "正在处理: $url"
147 | try {
148 | # 读取并拆分内容为行
149 | $content = $webClient.DownloadString($url)
150 | $lines = $content -split "`n"
151 |
152 | foreach ($line in $lines) {
153 | # 直接处理以 @@ 开头的规则,提取域名并加入白名单
154 | if ($line.StartsWith('@@')) {
155 | $domains = $line -replace '^@@', '' -split '[^\w.-]+'
156 | foreach ($domain in $domains) {
157 | if (-not [string]::IsNullOrWhiteSpace($domain) -and $domain -match '[\w-]+(\.[[\w-]+)+') {
158 | $excludedDomains.Add($domain.Trim()) | Out-Null
159 | }
160 | }
161 | }
162 | else {
163 | # 匹配 Adblock/Easylist 格式的规则
164 | if ($line -match '^\|\|([a-zA-Z0-9.-]+\.[a-zA-Z]{2,})\^$') {
165 | $domain = $Matches[1]
166 | $uniqueRules.Add($domain) | Out-Null
167 | }
168 | # 匹配 Hosts 文件格式的 IPv4 规则
169 | elseif ($line -match '^(0\.0\.0\.0|127\.0\.0\.1)\s+([a-zA-Z0-9.-]+\.[a-zA-Z]{2,})$') {
170 | $domain = $Matches[2]
171 | $uniqueRules.Add($domain) | Out-Null
172 | }
173 | # 匹配 Hosts 文件格式的 IPv6 规则(以 ::1 或 :: 开头)
174 | elseif ($line -match '^::(1)?\s+([a-zA-Z0-9.-]+\.[a-zA-Z]{2,})$') {
175 | $domain = $Matches[2]
176 | $uniqueRules.Add($domain) | Out-Null
177 | }
178 | # 匹配 Dnsmasq address=/域名/格式的规则
179 | elseif ($line -match '^address=/([a-zA-Z0-9.-]+\.[a-zA-Z]{2,})/$') {
180 | $domain = $Matches[1]
181 | $uniqueRules.Add($domain) | Out-Null
182 | }
183 | # 匹配 Dnsmasq server=/域名/的规则
184 | elseif ($line -match '^server=/([a-zA-Z0-9.-]+\.[a-zA-Z]{2,})/$') {
185 | $domain = $Matches[1]
186 | $uniqueRules.Add($domain) | Out-Null
187 | }
188 | # 匹配通配符规则
189 | elseif ($line -match '^\|\|([a-zA-Z0-9.-]+\.[a-zA-Z]{2,})\^$') {
190 | $domain = $Matches[1]
191 | $uniqueRules.Add($domain) | Out-Null
192 | }
193 | # 处理纯域名行
194 | elseif ($line -match '^([a-zA-Z0-9.-]+\.[a-zA-Z]{2,})$') {
195 | $domain = $Matches[1]
196 | $uniqueRules.Add($domain) | Out-Null
197 | }
198 | }
199 | }
200 | }
201 | catch {
202 | Write-Host "处理 $url 时出错: $_"
203 | Add-Content -Path $logFilePath -Value "处理 $url 时出错: $_"
204 | }
205 | }
206 |
207 | # 在写入文件之前进行DNS规范验证
208 | $validRules = [System.Collections.Generic.HashSet[string]]::new()
209 | $validExcludedDomains = [System.Collections.Generic.HashSet[string]]::new()
210 |
211 | foreach ($domain in $uniqueRules) {
212 | if (Is-ValidDNSDomain($domain)) {
213 | $validRules.Add($domain) | Out-Null
214 | }
215 | }
216 |
217 | foreach ($domain in $excludedDomains) {
218 | if (Is-ValidDNSDomain($domain)) {
219 | $validExcludedDomains.Add($domain) | Out-Null
220 | }
221 | }
222 |
223 | # 排除所有白名单规则中的域名
224 | $finalRules = $validRules | Where-Object { -not $validExcludedDomains.Contains($_) }
225 |
226 | # 对规则进行排序并添加前缀和后缀
227 | $formattedRules = $finalRules | Sort-Object | ForEach-Object {
228 | $quote = "`""
229 | "$quote" + "$_$quote,"
230 | }
231 |
232 | # 移除最后一条规则的逗号
233 | if ($formattedRules.Count -gt 0) {
234 | $formattedRules[-1] = $formattedRules[-1].TrimEnd(',')
235 | }
236 |
237 | # 统计生成的规则条目数量
238 | $ruleCount = $finalRules.Count
239 |
240 | # 获取当前东八区时间
241 | $timeZoneInfo = [System.TimeZoneInfo]::FindSystemTimeZoneById("China Standard Time")
242 | $localTime = [System.TimeZoneInfo]::ConvertTime([System.DateTime]::UtcNow, $timeZoneInfo)
243 | $generatedTime = $localTime.ToString("yyyy-MM-dd HH:mm:ss")
244 |
245 | # 创建文本格式的字符串
246 | $textContent = @"
247 | # Title: AdBlock_Rule_For_V2ray
248 | # Description: 适用于V2ray的域名拦截规则集,每20分钟更新一次,确保即时同步上游减少误杀
249 | # Homepage: https://github.com/REIJI007/AdBlock_Rule_For_V2ray
250 | # LICENSE1: https://github.com/REIJI007/AdBlock_Rule_For_V2ray/blob/main/LICENSE-GPL 3.0
251 | # LICENSE2: https://github.com/REIJI007/AdBlock_Rule_For_V2ray/blob/main/LICENSE-CC-BY-NC-SA 4.0
252 | # Generated AdBlock rules
253 | # Generated on: $generatedTime (GMT+8)
254 | # Total entries: $ruleCount
255 |
256 | $($formattedRules -join "`n")
257 | "@
258 |
259 | # 定义输出文件路径
260 | $outputPath = "$PSScriptRoot/adblock_reject_domain.txt"
261 | $textContent | Out-File -FilePath $outputPath -Encoding utf8
262 |
263 | # 输出生成的有效规则总数
264 | Write-Host "生成的有效规则总数: $ruleCount"
265 | Add-Content -Path $logFilePath -Value "生成的有效规则总数: $ruleCount"
266 |
267 | Pause
268 |
--------------------------------------------------------------------------------
/main.go:
--------------------------------------------------------------------------------
1 | package main
2 |
3 | import (
4 | "bufio"
5 | "errors"
6 | "flag"
7 | "fmt"
8 | "os"
9 | "path/filepath"
10 | "sort"
11 | "strconv"
12 | "strings"
13 |
14 | router "github.com/v2fly/v2ray-core/v5/app/router/routercommon"
15 | "google.golang.org/protobuf/proto"
16 | )
17 |
18 | // 定义命令行标志
19 | var (
20 | dataPath = flag.String("datapath", "./", "指定数据文件的目录为仓库根目录") // 修改为仓库根目录
21 | outputName = flag.String("outputname", "adblock.dat", "生成的dat文件的名称") // 修改输出文件名为 adblock.dat
22 | outputDir = flag.String("outputdir", "./", "生成文件的存放目录")
23 | exportLists = flag.String("exportlists", "", "要导出的纯文本格式列表,多个列表用逗号分隔")
24 | )
25 |
26 | // 定义Entry结构,表示域名条目
27 | type Entry struct {
28 | Type string // 域名类型 (domain, regexp, keyword, full)
29 | Value string // 域名值
30 | Attrs []*router.Domain_Attribute // 域名的附加属性
31 | }
32 |
33 | // 定义List结构,表示包含多个Entry的列表
34 | type List struct {
35 | Name string // 列表名称
36 | Entry []Entry // 列表中的条目
37 | }
38 |
39 | // 定义ParsedList结构,包含解析后的域名条目
40 | type ParsedList struct {
41 | Name string // 列表名称
42 | Inclusion map[string]bool // 已包含的列表
43 | Entry []Entry // 解析后的条目
44 | }
45 |
46 | // 将ParsedList转换为纯文本并写入文件
47 | func (l *ParsedList) toPlainText(listName string) error {
48 | var entryBytes []byte
49 | for _, entry := range l.Entry {
50 | var attrString string
51 | if entry.Attrs != nil {
52 | for _, attr := range entry.Attrs {
53 | attrString += "@" + attr.GetKey() + ","
54 | }
55 | attrString = strings.TrimRight(":"+attrString, ",")
56 | }
57 | // 以 "type:domain.tld:@attr1,@attr2" 的格式保存条目
58 | entryBytes = append(entryBytes, []byte(entry.Type+":"+entry.Value+attrString+"\n")...)
59 | }
60 | if err := os.WriteFile(filepath.Join(*outputDir, listName+".txt"), entryBytes, 0644); err != nil {
61 | return fmt.Errorf(err.Error())
62 | }
63 | return nil
64 | }
65 |
66 | // 将ParsedList转换为Proto格式
67 | func (l *ParsedList) toProto() (*router.GeoSite, error) {
68 | site := &router.GeoSite{
69 | CountryCode: l.Name, // 使用列表名称作为国家代码
70 | }
71 | for _, entry := range l.Entry {
72 | switch entry.Type {
73 | case "domain":
74 | site.Domain = append(site.Domain, &router.Domain{
75 | Type: router.Domain_RootDomain,
76 | Value: entry.Value,
77 | Attribute: entry.Attrs,
78 | })
79 | case "regexp":
80 | site.Domain = append(site.Domain, &router.Domain{
81 | Type: router.Domain_Regex,
82 | Value: entry.Value,
83 | Attribute: entry.Attrs,
84 | })
85 | case "keyword":
86 | site.Domain = append(site.Domain, &router.Domain{
87 | Type: router.Domain_Plain,
88 | Value: entry.Value,
89 | Attribute: entry.Attrs,
90 | })
91 | case "full":
92 | site.Domain = append(site.Domain, &router.Domain{
93 | Type: router.Domain_Full,
94 | Value: entry.Value,
95 | Attribute: entry.Attrs,
96 | })
97 | default:
98 | return nil, errors.New("未知的域名类型: " + entry.Type)
99 | }
100 | }
101 | return site, nil
102 | }
103 |
104 | // 导出指定列表为纯文本格式
105 | func exportPlainTextList(list []string, refName string, pl *ParsedList) {
106 | for _, listName := range list {
107 | if strings.EqualFold(refName, listName) {
108 | if err := pl.toPlainText(strings.ToLower(refName)); err != nil {
109 | fmt.Println("导出失败: ", err)
110 | continue
111 | }
112 | fmt.Printf("'%s' 已成功生成。\n", listName)
113 | }
114 | }
115 | }
116 |
117 | // 移除行内注释
118 | func removeComment(line string) string {
119 | idx := strings.Index(line, "#")
120 | if idx == -1 {
121 | return line
122 | }
123 | return strings.TrimSpace(line[:idx])
124 | }
125 |
126 | // 解析域名条目
127 | func parseDomain(domain string, entry *Entry) error {
128 | kv := strings.Split(domain, ":")
129 | if len(kv) == 1 {
130 | entry.Type = "domain"
131 | entry.Value = strings.ToLower(kv[0])
132 | return nil
133 | }
134 |
135 | if len(kv) == 2 {
136 | entry.Type = strings.ToLower(kv[0])
137 | entry.Value = strings.ToLower(kv[1])
138 | return nil
139 | }
140 |
141 | return errors.New("无效的格式: " + domain)
142 | }
143 |
144 | // 解析属性
145 | func parseAttribute(attr string) (*router.Domain_Attribute, error) {
146 | var attribute router.Domain_Attribute
147 | if len(attr) == 0 || attr[0] != '@' {
148 | return &attribute, errors.New("无效的属性: " + attr)
149 | }
150 |
151 | // 去除属性前缀 `@`
152 | attr = attr[1:]
153 | parts := strings.Split(attr, "=")
154 | if len(parts) == 1 {
155 | attribute.Key = strings.ToLower(parts[0])
156 | attribute.TypedValue = &router.Domain_Attribute_BoolValue{BoolValue: true}
157 | } else {
158 | attribute.Key = strings.ToLower(parts[0])
159 | intv, err := strconv.Atoi(parts[1])
160 | if err != nil {
161 | return &attribute, errors.New("无效的属性: " + attr + ": " + err.Error())
162 | }
163 | attribute.TypedValue = &router.Domain_Attribute_IntValue{IntValue: int64(intv)}
164 | }
165 | return &attribute, nil
166 | }
167 |
168 | // 解析域名条目
169 | func parseEntry(line string) (Entry, error) {
170 | line = strings.TrimSpace(line)
171 | parts := strings.Split(line, " ")
172 |
173 | var entry Entry
174 | if len(parts) == 0 {
175 | return entry, errors.New("空条目")
176 | }
177 |
178 | if err := parseDomain(parts[0], &entry); err != nil {
179 | return entry, err
180 | }
181 |
182 | for i := 1; i < len(parts); i++ {
183 | attr, err := parseAttribute(parts[i])
184 | if err != nil {
185 | return entry, err
186 | }
187 | entry.Attrs = append(entry.Attrs, attr)
188 | }
189 |
190 | return entry, nil
191 | }
192 |
193 | // 加载指定路径的列表文件
194 | func Load(path string) (*List, error) {
195 | file, err := os.Open(path)
196 | if err != nil {
197 | return nil, err
198 | }
199 | defer file.Close()
200 |
201 | list := &List{
202 | Name: "ADBLOCK", // 修改列表标签为ADBLOCK
203 | }
204 | scanner := bufio.NewScanner(file)
205 | for scanner.Scan() {
206 | line := strings.TrimSpace(scanner.Text())
207 | line = removeComment(line)
208 | if len(line) == 0 {
209 | continue
210 | }
211 | entry, err := parseEntry(line)
212 | if err != nil {
213 | return nil, err
214 | }
215 | list.Entry = append(list.Entry, entry)
216 | }
217 |
218 | return list, nil
219 | }
220 |
221 | // 判断条目的属性是否匹配
222 | func isMatchAttr(Attrs []*router.Domain_Attribute, includeKey string) bool {
223 | isMatch := false
224 | mustMatch := true
225 | matchName := includeKey
226 | if strings.HasPrefix(includeKey, "!") {
227 | isMatch = true
228 | mustMatch = false
229 | matchName = strings.TrimLeft(includeKey, "!")
230 | }
231 |
232 | for _, Attr := range Attrs {
233 | attrName := Attr.Key
234 | if mustMatch {
235 | if matchName == attrName {
236 | isMatch = true
237 | break
238 | }
239 | } else {
240 | if matchName == attrName {
241 | isMatch = false
242 | break
243 | }
244 | }
245 | }
246 | return isMatch
247 | }
248 |
249 | // 创建匹配属性的条目列表
250 | func createIncludeAttrEntrys(list *List, matchAttr *router.Domain_Attribute) []Entry {
251 | newEntryList := make([]Entry, 0, len(list.Entry))
252 | matchName := matchAttr.Key
253 | for _, entry := range list.Entry {
254 | matched := isMatchAttr(entry.Attrs, matchName)
255 | if matched {
256 | newEntryList = append(newEntryList, entry)
257 | }
258 | }
259 | return newEntryList
260 | }
261 |
262 | // 解析列表,并递归处理包含的其他列表
263 | func ParseList(list *List, ref map[string]*List) (*ParsedList, error) {
264 | pl := &ParsedList{
265 | Name: list.Name,
266 | Inclusion: make(map[string]bool),
267 | }
268 | entryList := list.Entry
269 | for {
270 | newEntryList := make([]Entry, 0, len(entryList))
271 | hasInclude := false
272 | for _, entry := range entryList {
273 | if entry.Type == "include" {
274 | InclusionName := strings.ToUpper(entry.Value) // 使用InclusionName代替refName
275 | if strings.HasPrefix(InclusionName, "ATTR@") {
276 | attr := &router.Domain_Attribute{
277 | Key: strings.ToLower(InclusionName[5:]),
278 | }
279 | for _, refList := range ref {
280 | attrEntrys := createIncludeAttrEntrys(refList, attr)
281 | if len(attrEntrys) != 0 {
282 | newEntryList = append(newEntryList, attrEntrys...)
283 | }
284 | }
285 | } else {
286 | if pl.Inclusion[InclusionName] {
287 | continue
288 | }
289 | pl.Inclusion[InclusionName] = true
290 | refList := ref[InclusionName]
291 | if refList == nil {
292 | return nil, errors.New(entry.Value + " 找不到。")
293 | }
294 | newEntryList = append(newEntryList, refList.Entry...)
295 | }
296 | hasInclude = true
297 | } else {
298 | newEntryList = append(newEntryList, entry)
299 | }
300 | }
301 | entryList = newEntryList
302 | if !hasInclude {
303 | break
304 | }
305 | }
306 | pl.Entry = entryList
307 |
308 | return pl, nil
309 | }
310 |
311 | // 主函数
312 | func main() {
313 | flag.Parse()
314 |
315 | // 设定adblock.txt为读取文件
316 | filePath := filepath.Join(".", "adblock.txt")
317 | fmt.Println("使用域名列表文件: ", filePath)
318 |
319 | ref := make(map[string]*List)
320 | list, err := Load(filePath)
321 | if err != nil {
322 | fmt.Println("加载失败: ", err)
323 | os.Exit(1)
324 | }
325 | ref[list.Name] = list
326 |
327 | // 如果输出目录不存在,创建输出目录
328 | if _, err := os.Stat(*outputDir); os.IsNotExist(err) {
329 | if mkErr := os.MkdirAll(*outputDir, 0755); mkErr != nil {
330 | fmt.Println("创建目录失败: ", mkErr)
331 | os.Exit(1)
332 | }
333 | }
334 |
335 | protoList := new(router.GeoSiteList)
336 | pl, err := ParseList(list, ref)
337 | if err != nil {
338 | fmt.Println("解析失败: ", err)
339 | os.Exit(1)
340 | }
341 | site, err := pl.toProto()
342 | if err != nil {
343 | fmt.Println("转换失败: ", err)
344 | os.Exit(1)
345 | }
346 | protoList.Entry = append(protoList.Entry, site)
347 |
348 | // 对protoList进行排序,确保输出的一致性
349 | sort.SliceStable(protoList.Entry, func(i, j int) bool {
350 | return protoList.Entry[i].CountryCode < protoList.Entry[j].CountryCode
351 | })
352 |
353 | protoBytes, err := proto.Marshal(protoList)
354 | if err != nil {
355 | fmt.Println("生成失败:", err)
356 | os.Exit(1)
357 | }
358 | if err := os.WriteFile(filepath.Join(*outputDir, *outputName), protoBytes, 0644); err != nil {
359 | fmt.Println("写入文件失败: ", err)
360 | os.Exit(1)
361 | } else {
362 | fmt.Println(*outputName, "已成功生成。")
363 | }
364 | }
365 |
--------------------------------------------------------------------------------
/timestamp.txt:
--------------------------------------------------------------------------------
1 | 2506021148
2 |
--------------------------------------------------------------------------------