4.0 KiB
ARP Monitoring (ESP-IDF / Linux TAP)
Практическая работа по анализу и модификации сетевого стека lwIP в ESP-IDF. Проект перехватывает входящие ARP-пакеты, хранит обнаруженные узлы в оперативной памяти, показывает их во встроенном веб-интерфейсе и позволяет проверять выбранные адреса с помощью ICMP Echo (Ping).
Рабочая конфигурация проверена на ESP-IDF v6.0.2 с использованием целевой платформы Linux и TAP-интерфейса без физической платы ESP32. Сборка прошивки для ESP32 также выполнена успешно; запуск на физической плате пока не проверялся.
Структура проекта
| Модуль | Назначение |
|---|---|
patches/lwip/etharp.c |
Изменённый файл lwIP с перехватом ARP в etharp_input() |
patches/lwip/prepare.py |
Подготавливает lwIP из ESP-IDF в каталоге сборки с рабочими исправлениями |
cmake/prepare_lwip.cmake |
Подключает подготовленную библиотеку при сборке Linux и ESP32 |
components/arp_monitor |
Принимает IP/MAC из lwIP через очередь FreeRTOS |
components/device_list |
Хранит до 64 найденных устройств в RAM |
components/web_server |
GET / показывает таблицу; POST / запускает Ping с возвратом на главную |
components/ping |
Запускает стандартный esp_ping для выбранных узлов |
patches/protocol_examples_tapif_io |
Исправленные tapif.c и tapif.h для TAP-компонента ESP-IDF v6.0.2 |
cmake/tapif_patch.cmake |
Подставляет исправленные файлы при сборке Linux |
main/main.c |
Инициализирует компоненты и вызывает example_connect() |
main/idf_component.yml |
Подключает TAP-компонент для Linux или protocol_examples_common для платы из ESP-IDF |
Путь входящего пакета:
- Сетевой интерфейс (TAP при тестировании на Linux) передаёт Ethernet-кадр в lwIP.
ethernet_input()определяет тип кадраETHTYPE_ARPи вызываетetharp_input()изpatches/lwip/etharp.c.- После разбора ARP-заголовка
etharp_input()вызываетarp_monitor_report()с IP- и MAC-адресом отправителя. arp_monitor_report()копирует данные в неблокирующую очередь FreeRTOS.- Задача
arp_monitor_taskобновляет статический массивdevice_listв RAM. - HTTP-обработчик читает актуальный список и формирует HTML-таблицу.
Веб-интерфейс
Примечание
Проект проверен в работе на Linux/TAP. Прошивка для ESP32 успешно собирается, но на самой плате пока не запускалась.
Изменённый etharp.c хранится в patches/lwip. Библиотека lwIP автоматически
подготавливается из ESP-IDF v6.0.2 в каталоге сборки. Хранить её в components
или вручную восстанавливать после клонирования не нужно.
TAP-компонент берётся из ESP-IDF с исправлениями из patches/protocol_examples_tapif_io.
