50KB内存、53万域名、10毫秒:一个开源硬件项目的硬核里程碑
【免费下载链接】esp32-c3-adblockPi-hole-class DNS ad-blocker on a $2 ESP32-C3 (no PSRAM): 537k domains as 40-bit FNV-1a hashes in flash, binary-searched. UDP DNS sinkhole + web dashboard. https://youtube.com/shorts/RaxszOUMi8E?feature=share项目地址: https://gitcode.com/GitHub_Trending/es/esp32-c3-adblock
最近科技圈被一个小玩意儿刷了屏,国内外科技媒体接连报道,连不少技术论坛都吵翻了天。
它要解决的事,跟你我每天都有关系——广告。不是网页里那个"×"能关掉的弹窗,而是你家智能电视的开机广告、手机App的开屏广告、视频播放前的贴片广告……
而拦住这些广告的,是一块不到40块钱、指甲盖大小的开发板。它手里攥着53万个广告域名的黑名单,每次判断"这个请求要不要拦",只需要10毫秒——人眨一次眼的时间,够它工作三四十次。
最离谱的是,干这么重的活,它只用了50KB内存。你手机里随便一张照片,都比它大得多。
它到底是个啥?一个"全家的广告门卫"
先打个比方。你家每台设备上网,第一件事都是问"这个网址该去哪?"——负责回答的,就是网络里的"查号台",专业说法叫DNS。
这个小东西,就是往查号台里塞了一个"黑名单门卫"。你家的手机、平板、电视、电脑每次上网前问路,它先翻一遍黑名单:在名单里?拦下!不在?放行!
以前这种"全家广告拦截"得靠一台树莓派(一台要好几百块)装专业软件,俗称Pi-hole。现在,一块两美元的小芯片就能干同样的活,所以网友也管它叫"2美元版Pi-hole"。
关键还在于:不需要在手机、电视上挨个装App。只要把家里的DNS指到它,所有设备一次性生效。
三个数字是怎么变出来的?全是大聪明
第一个:5字节装下一个域名。
53万个域名要是按原样写成文字存起来,光是内存就要2.5MB,这块芯片总共才400KB内存,根本装不下。以前想这么干,只能去买带额外内存的贵板子,成本直接飙到8美元。
作者想了个绝招:不存域名原文,只存"指纹"。每个域名用一套固定算法算出一个5字节的编号——就像给名单上每个人都拍一张标准证件照,以后认人只比对照片,不查户口本。
有人要问:53万个指纹会不会撞车?作者算过,选40位(5字节)是个绝妙平衡:53万个里面最多撞上一次,也就是说最多有一个"无辜"网站可能被误伤。这就是为什么不用32位(省空间但容易撞)、也不用64位(太大材小用)。
第二个:二分查找,翻词典的智慧。
名单再聪明,查起来快才算真本事。作者用的是"翻词典大法":名单从小到大排好队,每次从中间翻起,比大小,再折半……一本50多万页的"黑名单词典",最多翻20次必出结果。配合WiFi往返,一次判定约10毫秒,人根本感觉不到。
第三个:名单放"仓库",桌面只留"索引"。
这块芯片有两种存储:内存像你的办公桌,地方小但拿东西快;闪存像大仓库,地方大但慢一点。以前大家都把名单摊在桌面上(塞内存),当然放不下。作者反其道而行:把53万个指纹全存在仓库(闪存)里,办公桌上只留个50KB的小索引。内存这才省到了惊人的50KB。
为什么嵌入式圈看到50KB就兴奋?
因为省下的每一分钱,在硬件行业都是大事。
这块芯片成本约2美元,比一个汉堡还便宜。以前同样的功能得花8美元买带额外内存的板子——同样的活,成本砍到四分之一,这在百万级出货量的行业里是天文数字般的利润空间。
更妙的是,这个思路还能"升级":换一块16MB闪存的芯片,能存下270万个域名,而以前同样价位的方案最多装46万个。等于说,路由器、电视盒子、智能音箱里原本就有的便宜芯片,从此都能顺手承担广告拦截,不用换硬件、不用加钱。
正因如此,国内外不少技术媒体都给了它头条级待遇,评论区也吵得热闹。有人说"浏览器装个插件不香吗",也有人一针见血:插件只管自己那台电脑,这玩意儿管的是全家所有设备,连智能电视的开机广告都治了——这恰恰是浏览器插件永远做不到的。
普通人能用吗?上手到底难不难?
说实话,需要一丢丢动手能力,但比你想的简单得多。
先花几块钱买一块ESP32-C3开发板,用USB线插上电脑烧一次固件,之后再也不用碰电脑了。开机它会自己开一个配置向导,手机连上它、选你家WiFi、输密码,完事。连代码都不用写。
装好后,把家里的DNS指过去,全家广告瞬间清净。网页管理面板上能看到:今天拦了多少条、放行了多少、每台设备在干嘛、信号强不强、板子热不热,一目了然。
几个细节特别贴心:
- 黑名单每周一自动更新,永远拦截最新的广告域名,不用你操心;
- 宁放行、不误杀——就算黑名单更新出岔子,它也会放行而不是让全家的网断掉,这个"故障兜底"设计被不少技术博主专门写文章夸过;
- 全家拦截生效后,想看直播、投屏时可以一键暂停,拦错网站也能自己加白名单;
- 固件和名单都能通过WiFi无线升级,不用再把板子拔下来插电脑。
作者本人更是骚操作:把这块小东西直接插在光纤猫的USB口上取电,藏在路由器后面,不占地、不用电源线,功耗低到几乎可以忽略。他还开源了3D打印外壳图纸,家里有打印机的朋友可以给它套个壳,精致得很。
尾声
从8美元到2美元,从2.5MB内存到50KB,从读字典到翻指纹——这大概是近期开源圈最"以小博大"的故事之一。
它能不能取代几百块的树莓派方案?不能。但它证明了另一件事:把一件事做到极致地省,本身就是一门硬功夫。
最后抛个问题给大家:你家最让你抓狂的广告是哪个?智能电视的开机广告、手机App的开屏广告,还是视频中间的贴片?如果花不到40块钱能一劳永逸,你愿意动手试试吗?评论区聊聊。
【免费下载链接】esp32-c3-adblockPi-hole-class DNS ad-blocker on a $2 ESP32-C3 (no PSRAM): 537k domains as 40-bit FNV-1a hashes in flash, binary-searched. UDP DNS sinkhole + web dashboard. https://youtube.com/shorts/RaxszOUMi8E?feature=share项目地址: https://gitcode.com/GitHub_Trending/es/esp32-c3-adblock
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考