∴ GitHub / 趋势仓库

M-Abozaid / esp32-c3-adblock

在无 PSRAM 的 ESP32-C3 上实现 Pi-hole 式 DNS 广告拦截

语言
C++
Star
1.3k
Fork
119
当日新增(10-06)
+196
累计在榜
1 天
最高名次
第 14 名
首次上榜
2026-10-06
去 GitHub 查看 ↗

∴ 是什么

这是一个基于哈希存储的 DNS 广告拦截器固件,运行在低成本的 ESP32-C3 芯片上。它将约 53.7 万个域名以 40 位 FNV-1a 哈希形式存于闪存中,通过二分查找进行匹配,实现 UDP DNS 封锁与 Web 管理面板。

∴ 解决什么问题

  • 传统 ESP32 DNS sinkhole 需将域名列表载入 RAM,需要 PSRAM,成本高
  • 在无 PSRAM 的低成本芯片上实现大规模域名拦截
  • 减少 DNS 拦截过程中的内存占用与查询延迟

∴ 怎么上手

  1. 01复制并编辑 src/secrets.example.h 为 src/secrets.h,设置 WEB_USER、WEB_PASS、OTA_PASS
  2. 02运行 python3 tools/build_blocklist.py data/blocklist.bin 构建拦截列表哈希表
  3. 03运行 pio run -t upload 烧录固件
  4. 04运行 pio run -t uploadfs 烧录文件系统
  5. 05运行 pio device monitor 查看启动信息并获取 IP(如 http://c3adblock.local)

∴ 适合谁

适合需要低成本、低功耗 DNS 级广告拦截方案的嵌入式开发者或网络爱好者,尤其适合使用 ESP32-C3 且不希望外接 PSRAM 的场景。

∴ 要点

  • 使用 40 位哈希存于闪存,约 50 KB RAM 即可匹配 14 万+ 域名
  • 支持 OTA 升级固件与拦截列表,可通过仪表盘或 CLI 进行
  • 提供 Web 仪表盘,支持客户端管理、自定义域名封禁等
  • 支持多种列表格式:hosts 文件、纯域名列表、AdGuard 规则
  • WiFi 设置通过开放 AP 门户完成,无需重新烧录
  • 所有状态变更接口需 HTTP Basic Auth,并校验自定义头防止 CSRF
许可证 MITadblockerarduinodnsdns-sinkholeesp32esp32-c3iotpi-holeplatformio

解读由 AI 依据项目 README 生成,生成于 2026-10-06,以 GitHub 原文为准。

∴ 在榜记录

GitHub Trending 今日榜的每日存档,日期按北京时间。2026-10-06 首次上榜,累计在榜 1 天,最高第 14 名。

2026-10-06 +196
每日新增 Star · 2026-10-06 至 2026-10-06 · 共 1 个在榜日峰值 +196
日期名次当日新增总 Star
#14+1961,308