41 lines
2.9 KiB
Markdown
41 lines
2.9 KiB
Markdown
# 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-таблицу.
|
|
|
|
## Веб-интерфейс
|
|
|
|

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