Przetwarzanie pakietów WiFi (libpcap)

Pracowałem nad sposobem, aby żądania sond WiFi routera OpenWRT były wysyłane do bazy danych MySQL (przechowuje adres MAC i informacje RSSI dla każdego pakietu żądania sondy wraz z innymi danymi specyficznymi dla routera).

Po sporym zbadaniu libpcap udało mi się zebrać podstawowy, mały program, który po prostu wącha pakiety na interfejsie monitora (mon0), używając wyrażenia filtru („wlan subpepe probe-req”), a następnie wypisuje surowe pakiety na heksie. Dzięki informacjom dostępnym online na libpcap ta część była dość prosta.

Teraz utknąłem:Jak sparsować pakiet WiFi, aby uzyskać informacje, których szukam (RSSI i źródłowy adres MAC)?

Żeby było jasne, nie proszę o kod, aby to zrobić (chociaż nie będę narzekać, jeśli chcesz dostarczyć: D). Po prostu szukam jakiegoś przewodnika do zrozumienia, który bajt jest - mapa drogowa pakietu WiFi, jeśli chcesz.

Istnieje kilka dobrych samouczków do analizowania pakietów przychodzących z sieci Ethernet, ale nie udało mi się znaleźć niczego, co mogłoby pomóc w analizowaniu nagłówków w sposób ściśle związany z WiFi. Zakładam, że będzie to dość prosty proces - wystarczy pobrać odpowiednie bajty dla RSSI i źródłowego MAC - ale znowu nie udało mi się znaleźć żadnej dokumentacji dotyczącej tego, który bajt jest.

Wiem, że zostało to zrobione wcześniej, ale będę szczery: jestem całkowicie zagubiony, gdy przeglądam kod źródłowy tcpdump.

Czy ktoś wie o dobrym zasobie do analizowania pakietów WiFi?

Twoje zdrowie

EDYTUJ: Bardziej szczegółowa odpowiedź

RSSI znajduje się w nagłówku RadioTap (cóż, na Linuksie jest). Wyciągnięcie RSSI z pakietu jest dość prosteradiotap-parser.c wraz z plikami, od których zależy (znajduje się w tym samym katalogu co plik, z którym się łączyłem).Jeśli ktoś ma problemy z używaniem funkcji radiotap-parser.c, prosimy o kontakt.

Wyciągnięcie źródłowego adresu MAC jest dość łatwe dzięki funkcjom radiotap, ponieważ struktura nagłówka radiotap zawiera długość nagłówka radiotap (it_len), która jest zmienna. Ponieważ analizuję tylko żądania sondujące, które mają ustaloną długość (patrz strona 17tutaj) to tylko kwestia wskazania wskaźnikapacket + it_len + 10 (źródłowy adres MAC zaczyna się 10 bajtów po początku ramki MAC, która zaczyna się tam, gdzie kończy się nagłówek radiotapety). 6 bajtów rozpoczynających się od tego wskaźnika toaddr2 w ramce 802.11 (ponownie patrz strona 17tutaj).

questionAnswers(3)

yourAnswerToTheQuestion