2.8 KiB
2.8 KiB
ARP Monitoring (ESP-IDF / Linux TAP)
Практическая работа по анализу и модификации сетевого стека lwIP в ESP-IDF. Проект перехватывает входящие ARP-пакеты, хранит обнаруженные узлы в оперативной памяти, показывает их во встроенном веб-интерфейсе и позволяет проверять выбранные адреса с помощью ICMP Echo (Ping).
Рабочая конфигурация проверена на ESP-IDF v6.0.2 с использованием целевой платформы Linux и TAP-интерфейса без физической платы ESP32.
Структура проекта
| Модуль | Назначение |
|---|---|
components/lwip |
Локальная копия lwIP; в etharp_input() установлен перехват ARP |
components/arp_monitor |
Принимает IP/MAC из lwIP через очередь FreeRTOS |
components/device_list |
Хранит до 64 найденных устройств в RAM |
components/web_server |
Отдаёт HTML-таблицу устройств и обрабатывает /ping |
components/ping |
Запускает стандартный esp_ping для выбранных узлов |
components/protocol_examples_tapif_io |
Подключает lwIP к Linux TAP без ESP32 |
main/main.c |
Отвечает за инициализацию компонентов |
Путь входящего пакета:
- TAP передаёт Ethernet-кадр в lwIP.
ethernet_input()определяет тип кадраETHTYPE_ARPи вызываетetharp_input()изcomponents/lwip/lwip/src/core/ipv4/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 необходимо дополнительно реализовать инициализацию Wi-Fi и подключение устройства к локальной сети.
