Разработанный Zed (M-Abozaid), esp32-c3-adblock — это DNS-блокировщик рекламы с открытым исходным кодом в стиле Pi-hole, который работает на плате/модуле микроконтроллера ESP32-C3 за $2 без необходимости в PSRAM. Он блокирует рекламу и трекерные домены на устройствах домашней или небольшой офисной сети путём фильтрации DNS-запросов.
Вместо хранения строк доменов в RAM проект хранит их как отсортированные 40-битные хеши FNV-1a во флеш-памяти и использует бинарный поиск для проверки DNS-запросов. Когда поступает UDP DNS-запрос, прошивка на C++ извлекает домен, хеширует его (включая родительские суффиксы) и выполняет бинарный поиск по таблице хешей во флеш-памяти. Если домен находится в списке блокировки, ESP32-C3 возвращает 0.0.0.0 для блокировки запроса. В противном случае он пересылает запрос вышестоящему DNS-серверу и возвращает ответ клиенту. Этот метод позволяет разместить более 140 000 доменов в ~0,7 МБ флеш-памяти, используя только ~50 КБ RAM. Один поиск занимает около 10 мс (включая время кругового обмена по WiFi), требуя около 18 чтений из флеш-памяти.
