Парсинг WiFi пакетов (libpcap)

Я работаю над тем, чтобы маршрутизатор OpenWRT регистрировал запросы WiFi-зонда на базу данных MySQL (он хранит MAC-адрес и информацию RSSI для каждого пакета зондирующего запроса вместе с другими данными, специфичными для маршрутизатора).

Немного изучив libpcap, я смог собрать небольшую простую программу, которая просто анализирует пакеты на интерфейсе монитора (mon0), используя выражение фильтра ('wlan subtype probe-req'), а затем распечатывает необработанные пакеты. в шестнадцатеричном виде С информацией, которая доступна онлайн на libpcap, эта часть была довольно простой.

Теперь вот где я застрял:Как мне проанализировать пакет WiFi для получения информации, которую я ищу (RSSI и MAC-адрес источника)?

Чтобы быть ясным, я не прошу код для этого (хотя я не буду жаловаться, если вы хотите предоставить: D). Я просто ищу какое-то руководство для понимания того, какой байт какой - дорожную карту пакетов WiFi, если хотите.

Есть несколько хороших учебных пособий для разбора пакетов, которые поступают через Ethernet, но я не смог найти ничего, что могло бы помочь с разбором заголовков, специально связанных с WiFi. Я предполагаю, что это будет довольно простой процесс - просто захват соответствующих байтов для RSSI и исходного MAC - но, опять же, я не смог найти никакой документации по тому, какой байт какой.

Я знаю, что это было сделано раньше, но я буду честен: я полностью растерялся, когда просматривал исходный код для tcpdump.

Итак, кто-нибудь знает хороший ресурс для разбора пакетов WiFi?

ура

РЕДАКТИРОВАТЬ: более конкретный ответ

RSSI находится в заголовке RadioTap (ну, в Linux это так). Вытащить RSSI из пакета довольно просто, используяradiotap-parser.c вместе с файлами, от которых он зависит (находится в том же каталоге, что и файл, на который я ссылался).Если у кого-то возникают проблемы с использованием функций radiotap-parser.c, не стесняйтесь обращаться к нам.

Извлечение MAC-адреса источника довольно просто благодаря функциям radiotap, поскольку структура заголовка radiotap содержит длину заголовка radiotap (it_len), который является переменным. Так как я разбираю только тестовые запросы, которые имеют фиксированную длину (см. Стр. 17Вот) это просто вопрос создания указателя, который указывает наpacket + it_len + 10 (исходный MAC-адрес начинается через 10 байтов после начала кадра MAC, который начинается там, где заканчивается заголовок радиоленты). 6 байтов, которые начинаются с этого указателяaddr2 в кадре 802.11 (снова см. стр. 17Вот).

Ответы на вопрос(4)

Ваш ответ на вопрос