Files
arp_monitoring/README.md
T

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

Путь входящего пакета:

  1. Сетевой интерфейс (TAP при тестировании на Linux) передаёт Ethernet-кадр в lwIP.
  2. ethernet_input() определяет тип кадра ETHTYPE_ARP и вызывает etharp_input() из patches/lwip/etharp.c.
  3. После разбора ARP-заголовка etharp_input() вызывает arp_monitor_report() с IP- и MAC-адресом отправителя.
  4. arp_monitor_report() копирует данные в неблокирующую очередь FreeRTOS.
  5. Задача arp_monitor_task обновляет статический массив device_list в RAM.
  6. HTTP-обработчик читает актуальный список и формирует HTML-таблицу.

Веб-интерфейс

Веб-интерфейс ARP Monitoring

Примечание

Проект проверен в работе на Linux/TAP. Прошивка для ESP32 успешно собирается, но не проверена на плате.