2017-03-16 56 views
7

Zajmuję się programowaniem parsera ramek IEEE802.11 przy użyciu libpcap w systemie Linux z surowym C. Mogę łatwo analizować nagłówki RadioTap i IEEE802.11, ale nie mogę znaleźć nazwy protokołu, która jest umieszczona wewnątrz MPlayera IEEE802.11. Niestety nie ma żadnego pola w nagłówku IEEE802.11 wskazującym protokół kapsułkowany (np. w nagłówku Ethernet).Jak znaleźć protokół enkapsulacji wewnątrz ramki IEEE802.11?

Jakieś rozwiązanie?

+0

Co masz na myśli z imieniem? b/g/n ... można odzyskać na podwarstwach PLCP – LPs

+0

@LP: b/g/n jest częścią nagłówka 'IEEE802.11'. Mam na myśli '802.11X' w przypadku pakietów' EAPOL' w uwierzytelnianiu WPA lub jakimkolwiek innym protokole zamkniętym w pakiecie. – SuB

+0

Nie jestem ekspertem, ale patrzenie na wireshark [przykładowe przechwytywanie] (https://wiki.wireshark.org/SampleCaptures#Wifi_.2F_Wireless_LAN_captures_.2F_802.11) ujawnia, że ​​może być nagłówek Logical-Link-Control z SNAP rozszerzenia (oznaczone przez 0xAA), które mogą zawierać [ettertype] (https://en.wikipedia.org/wiki/EtherType), gdy OID == 0x000000 (patrz [tutaj] (https://en.wikipedia.org/wiki /Subnetwork_Access_Protocol)) Powodzenia! – vlp

Odpowiedz

0

Dane IEEE802.11 pakietów danych jest zawarta w nagłówku LLC (Patrz here):

802.11 rama powinna zawierać nagłówek, jeśli LLC, i tylko wtedy, gdy jest to rama danych. Typ i podtyp ramki są częścią pola Frame Control w nagłówku MAC; Dane są jedną z wartości typu ramki (inne to Control i Management). Podtyp nie ma znaczenia - wszystkie Ramki danych powinny zawierać nagłówek LLC, a żadne inne ramki nie powinny.

Istnieją dwa rodzaje nagłówków LLC: 3 bajty, 8 bajtów. IEEE 802.11 używa drugiej (patrz here). W tym jednym dwa ostatnie bajty nagłówka LLC są równoważne protokołowi Ether Type w protokole Ethernet. Więc 0x800 dla tego pola oznacza na przykład IPv4.

2

Dla 802.11 ramkach kapsułkowania dane nagłówka typ/podtyp będzie pomiędzy 0x20 i 0x2F (chociaż ramka jest zwykle 0x20 (dane) lub 0x28 (QoS, dane)). Będzie 5-bajtowy nagłówek SNAP, który będzie zawierał rodzaj ładunku (jak wspomniano w this answer). Jeśli OID (pierwsze trzy bajty nagłówka SNAP) to 0x000000, to następne dwa bajty są typu Ethernet.

Typ Ethernetu to 0x888e dla EAPoL (source). To jest pole, które chcesz sprawdzić, aby poznać protokół z kapsułkami (0x0800 dla IP, 0x0806 dla ARP itp.).

Oto dobry dokument Cisco dotyczący typów Ethernet i sposobu ich wykorzystania do filtrowania niektórych protokołów: http://www.cisco.com/c/en/us/td/docs/ios/12_2/ibm/vol1/command/reference/fibm_r1/br1fethc.pdf.

Oto dobry dokument Cisco dotyczący śladów bezprzewodowych snifferów, który zawiera opis pól typu/podtypu : https://supportforums.cisco.com/document/52391/80211-frames-starter-guide-learn-wireless-sniffer-traces.