Files
arp_monitoring/README.md
T
2026-09-03 20:18:59 +03:00

44 lines
2.8 KiB
Markdown

# 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](docs/web-interface.png)
## Примечание
Текущая версия полностью проверена на целевой платформе Linux с использованием
TAP-интерфейса без физической платы. Для запуска на ESP32 необходимо
дополнительно реализовать инициализацию Wi-Fi и подключение устройства к
локальной сети.