Add Linux TAP
This commit is contained in:
@@ -1,34 +1,43 @@
|
||||
# ARP Monitoring for ESP32
|
||||
# ARP Monitoring (ESP-IDF / Linux TAP)
|
||||
|
||||
> Практическая работа по анализу и модификации сетевого стека **lwIP** в среде **ESP-IDF**.
|
||||
Практическая работа по анализу и модификации сетевого стека **lwIP** в
|
||||
**ESP-IDF**. Проект перехватывает входящие ARP-пакеты, хранит обнаруженные узлы
|
||||
в оперативной памяти, показывает их во встроенном веб-интерфейсе и позволяет
|
||||
проверять выбранные адреса с помощью ICMP Echo (Ping).
|
||||
|
||||
## Описание
|
||||
|
||||
Проект представляет собой систему мониторинга устройств локальной сети на базе **ESP32**.
|
||||
|
||||
В ходе работы выполняется перехват входящих ARP-пакетов на уровне сетевого стека **lwIP**, извлекается информация об обнаруженных устройствах и формируется динамический список сетевых узлов. Полученные данные отображаются через встроенный HTTP-сервер.
|
||||
|
||||
Дополнительно реализована возможность проверки доступности устройств с помощью **ICMP Echo (Ping)**.
|
||||
|
||||
## Возможности
|
||||
|
||||
* Перехват входящих ARP-пакетов.
|
||||
* Обнаружение устройств локальной сети.
|
||||
* Хранение списка устройств в оперативной памяти.
|
||||
* Веб-интерфейс для просмотра обнаруженных устройств.
|
||||
* Проверка доступности устройств с помощью Ping.
|
||||
Рабочая конфигурация проверена на **ESP-IDF v6.0.2** с использованием целевой
|
||||
платформы Linux и TAP-интерфейса без физической платы ESP32.
|
||||
|
||||
## Структура проекта
|
||||
|
||||
```text
|
||||
components/
|
||||
│
|
||||
├── arp_monitor/ Перехват ARP-пакетов
|
||||
├── device_list/ Работа со списком устройств
|
||||
├── ping/ Проверка доступности устройств
|
||||
├── web_server/ HTTP-сервер и веб-интерфейс
|
||||
└── lwip/ Изменённый файл etharp.c
|
||||
| Модуль | Назначение |
|
||||
| --- | --- |
|
||||
| `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` | Отвечает за инициализацию компонентов |
|
||||
|
||||
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-таблицу.
|
||||
|
||||
## Веб-интерфейс
|
||||
|
||||

|
||||
|
||||
## Примечание
|
||||
|
||||
Текущая версия полностью проверена на целевой платформе Linux с использованием
|
||||
TAP-интерфейса без физической платы. Для запуска на ESP32 необходимо
|
||||
дополнительно реализовать инициализацию Wi-Fi и подключение устройства к
|
||||
локальной сети.
|
||||
|
||||
Reference in New Issue
Block a user