ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

ESO32C3项目C3-AdBlock 编译与配置

ESO32C3项目C3-AdBlock 编译与配置 克隆地址https://github.com/M-Abozaid/esp32-c3-adblock默认的编译环境VSCode PlatformIO Arduino项目编译工程需要安装VSCode软件然后安装PlatformIO IDE,在PlatformIO IDE中安装Espressif 32。esp32c3板子带USB转串口芯片的platformio.ini配置\esp32-c3-adblock\platformio.ini[platformio]default_envsc3[env]platformespressif32 frameworkarduino board_build.filesystemlittlefs board_build.partitionspartitions.csv monitor_speed115200[env:esp32dev]boardesp32dev[env:c3]boardesp32-c3-devkitm-1;build_flags;-DARDUINO_USB_MODE0;-DARDUINO_USB_CDC_ON_BOOT0;核心配置将 Flash 模式设置为 DIO board_build.flash_modedio不添加flash_modedio选项默认的flash mode应该是qio烧录后没有反应。ESP32C3板子不带USB转串口芯片的板子[platformio]default_envsc3[env]platformespressif32 frameworkarduino board_build.filesystemlittlefs board_build.partitionspartitions.csv[env:esp32dev]boardesp32dev[env:c3]boardesp32-c3-devkitm-1;build_flags;-DARDUINO_USB_MODE1;-DARDUINO_USB_CDC_ON_BOOT1其它需要自己配置内容esp32-c3-adblock\src\secrets.hsrc/secrets.example.h文件重命名而来#pragmaonce// Copy this file to secrets.h and fill in your WiFi credentials.// secrets.h is gitignored so your credentials never get committed.staticconstchar*WIFI_SSIDYOUR_WIFI_SSID;staticconstchar*WIFI_PASSYOUR_WIFI_PASSWORD;// Auth for the dashboards state-changing endpoints (/ban, /addblock, /upload,// /update, /setupdate, /forgetwifi) and for network OTA (ArduinoOTA). These used// to be wide open to anyone who could reach the device on the LAN — pick real// values here, ideally not the same as your WiFi password.staticconstchar*WEB_USERadmin;staticconstchar*WEB_PASSCHANGE_ME_WEB_PASSWORD;staticconstchar*OTA_PASSCHANGE_ME_OTA_PASSWORD;推荐修改src/main.cpp:25的Quad9 9.9.9.9跨境改为国内的减少延时。#ifndefUPSTREAM_IP// Tencent DNSPod (~28-31 ms measured from this network).// Previous default was Quad9 9,9,9,9: 190-260 ms here with peaks near 700 ms, which// busted UPSTREAM_WAIT_MS on any WiFi hiccup and made forwarded lookups fail.// Other mainland options measured: 223.5.5.5 32-58 ms, 114.114.114.114 30-32 ms.#defineUPSTREAM_IP119,29,29,29#endif上游平均峰值9.9.9.9原来190~260 msbilibili 695 / jd 468腾讯 119.29.29.2928~31 ms34114DNS30~32 ms35阿里 223.5.5.532~58 ms63后台http://c3adblock.local/可以上传编译好的DNS广告域名列表固件“blocklist.bin”连接和更新拦截域名固件信息过滤表获取源https://github.com/privacy-protection-tools/anti-AD/tree/masterhttps://anti-ad.net/blocklist.bin编译编译工具在工程目录下的“tools”文件夹。Python命令python tools/build_blocklist.py data/blocklist.bin tools/domains.txtsurge2.txt需要补充的过滤源。✅ C3-AdBlock 能生效的广告/网站场景核心只拦截【第三方独立域名】的广告、统计、追踪域名和Pi-hole原理完全一样网页里的第三方横幅广告、弹窗广告网页正文加载完成后额外去广告服务器拉取图片、JS脚本的广告例新闻网站、资讯站、下载站侧边广告、弹窗广告广告域名doubleclick.net、googleadservices.com、各类广告联盟域名你刚才测试的doubleclick.net就属于这类可以被拦截。网站、APP的统计/追踪埋点最稳的效果Google Analytics、各类网站访问统计、用户行为追踪像素、埋点脚本作用不仅去广告还能阻止网站收集你的浏览行为常见google-analytics.com、各类第三方打点域名手机APP内广告游戏、工具类APP很多免费安卓APP、小游戏的开屏广告、插屏广告、横幅广告广告SDK请求独立广告域名可以拦截。比如工具APP启动弹出广告原理是APP去拉取广告SDK域名命中黑名单直接返回0.0.0.0广告加载失败。4. 恶意域名、挖矿域名、钓鱼站点如果你的blocklist加入了恶意域名列表也可以一并拦截。❌ 无法拦截的广告重点很多广告拦不掉根本原因广告和网页主体内容共用同一个域名第一方广告DNS无法区分同域名下哪些资源是广告。YouTube视频内贴片广告最典型视频、广告全部来自youtube.com同一个域名。如果把youtube.com加入黑名单视频本身也打不开DNS层面无法区分这个域名下哪个请求是视频、哪个是广告。社交媒体信息流原生广告朋友圈、小红书、抖音信息流广告广告内容直接由平台自身服务器返回域名不变。DNS拦截无效。网站内置广告同域名内嵌广告网站自己服务器投放广告广告和网页是同一个域名无法拦截。使用加密DNSDoH/DoT的设备手机开启私有DNS、浏览器DoH查询不走UDP 53直接绕过C3-AdBlock广告拦截失效。直接IP访问资源不走域名解析的请求DNS系统完全看不到无法拦截。 视觉上的小缺陷DNS拦截不会自动清除网页上广告占位框。浏览器仍然会预留广告位置只是广告图片/脚本加载失败页面会留下空白框。浏览器插件uBlock Origin可以做页面元素隐藏CSS过滤C3-AdBlock做不到。简单总结✅适合新闻站、论坛、下载站的第三方横幅/弹窗广告APP开屏插屏广告网页统计追踪脚本。❌不适合YouTube视频广告、抖音/小红书信息流原生广告、网站同域名内置广告。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进