2.9 KiB
2.9 KiB
ARP Monitoring (ESP-IDF / Linux TAP)
Практическая работа по анализу и модификации сетевого стека lwIP в ESP-IDF. Проект перехватывает входящие ARP-пакеты, хранит обнаруженные узлы в оперативной памяти, показывает их во встроенном веб-интерфейсе и позволяет проверять выбранные адреса с помощью ICMP Echo (Ping).
Рабочая конфигурация проверена на ESP-IDF v6.0.2 с использованием целевой платформы Linux и TAP-интерфейса без физической платы ESP32.
Структура проекта
| Модуль | Назначение |
|---|---|
patches/lwip/etharp.c |
Изменённый файл lwIP с перехватом ARP в etharp_input() |
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 |
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 успешно собирается, но не проверена на плате.
