开发者打造硬件广告拦截器!50KB内存挡53万个广告域名 10毫秒响应

青青百科 百科资讯 2

7月21日消息,埃及全栈开发者ZedAxis使用一块售价约5美元的ESP32-C3 SuperMini开发板,打造了一个可拦截超过53万个广告域名的硬件DNS过滤器,固件仅占用约50KB内存,响应延迟约10毫秒。

ESP32-C3 SuperMini是一块搭载Wi-Fi功能的微型单片机,仅有400KB内存和4MB闪存,这个规格无法存储任何有意义的明文黑名单域名列表,数据量太大。


ZedAxis的解决方案是对域名进行哈希压缩,先下载公开的广告拦截列表,去除重复项和注释后,将每个域名用40位FNV-1a算法哈希为一个40位数值,排序后写入ESP32的闪存。选择40位哈希也是经过权衡的结果,32位碰撞率太高,64位则浪费存储空间。


查询匹配阶段当DNS查询到达时,设备用相同方式对请求的域名进行哈希,然后对排好序的哈希表执行二分查找。命中则拦截请求,未命中则转发给上游DNS解析器。


据ZedAxis介绍,最终固件仅使用约50KB RAM内存,拦截响应耗时约10毫秒。

设计中还有一个巧妙的取舍,ESP32通常会保留两份完整固件用于OTA无线更新,以防刷写失败导致设备变砖。如果放弃OTA功能,就可以将第二份固件分区腾出来存放黑名单数据库。保留OTA时项目最多支持约25万个域名,放弃OTA后容量直接翻倍到约53.7万个。


供电方式也很有意思,ZedAxis直接从ISP提供的华为OptiXstar光猫背面的USB口取电,USB连接不传输任何数据,纯粹就是路由器提供5V供电。且所有网络通信都通过ESP32集成的Wi-Fi模块完成,设备体积小到几乎可以藏在路由器后面。