2026-09-03 20:18:59 +03:00
2026-07-15 20:32:20 +03:00
2026-09-03 20:18:59 +03:00
2026-09-03 20:18:59 +03:00
2026-09-03 20:18:59 +03:00
2026-09-03 20:18:59 +03:00
2026-09-03 20:18:59 +03:00
2026-09-03 20:18:59 +03:00
2026-09-03 20:18:59 +03:00
2026-09-03 20:18:59 +03:00

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 Отвечает за инициализацию компонентов

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

  1. TAP передаёт Ethernet-кадр в lwIP.
  2. ethernet_input() определяет тип кадра ETHTYPE_ARP и вызывает etharp_input() из components/lwip/lwip/src/core/ipv4/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 необходимо дополнительно реализовать инициализацию Wi-Fi и подключение устройства к локальной сети.

S
Description
No description provided
Readme
129 KiB
Languages
C 97.5%
CMake 1.9%
Dockerfile 0.4%
Shell 0.2%