2017-03-16 38 views
7

我正在開發一個IEEE802.11幀解析器程序,在Linux內部使用libpcap,使用raw C。我可以輕鬆解析RadioTapIEEE802.11頭文件,但是我找不到在IEEE802.11 MPDU中封裝的協議名稱。不幸的是,在IEEE802.11頭中沒有任何字段指示封裝的協議(如Ethernet頭中的字段)。如何找出IEEE802.11幀內的封裝協議?

任何解決方案?

+0

你的名字是什麼意思? b/g/n ...可以在PLCP子層 – LPs

+0

@LPs上檢索:b/g/n是IEEE802.11標題的一部分。在WPA認證中的EAPOL數據包或封裝在數據包內的任何其他協議的情況下,我的意思是'802.11X'。 – SuB

+0

我不是專家,但是看着wireshark [示例捕獲](https://wiki.wireshark.org/SampleCaptures#Wifi_.2F_Wireless_LAN_captures_.2F_802.11)顯示,可能有一個帶有SNAP的邏輯鏈接控制標頭當OID == 0x000000時可能包含[ettertype](https://en.wikipedia.org/wiki/EtherType)的擴展名(如0xAA所示)(請參見[https://en.wikipedia.org/wiki /Subnetwork_Access_Protocol)).祝你好運! – vlp

回答

0

IEEE802.11的數據分組的數據被封裝在一個LLC頭部(參見here):

的802.11幀應該包含LLC報頭,如果,且僅當它是一個 數據幀。幀類型和子類型是MAC報頭中的幀控制 字段的一部分;數據是框架類型值之一( 其他是控制和管理)。子類型無關緊要 - 全部 數據幀應包含LLC標頭,並且不應有其他幀。

LLC header有兩種:3字節,8字節。 IEEE 802.11使用第二個(見here)。在那一箇中​​,LLC頭部的最後兩個字節相當於Ethernet協議中的Ether Type字段。因此,該字段的0x800表示例如IPv4

2

802.11對於幀被封裝數據,報頭類型/子類型將是0x200x2F之間(雖然幀通常是0x20(數據)或0x28(QoS的數據))。將會有一個5字節的SNAP頭部,其中包含有效載荷的類型(如this answer所述)。如果OID(SNAP頭的前三個字節)是0x000000,則接下來的兩個字節是以太網類型。

對於EAPoL,以太網類型將爲0x888esource)。這是您將檢查以瞭解封裝協議的域(IP爲0x0800,ARP爲0x0806等)。

以下是一個關於以太網類型的好思科文檔,以及如何使用它們來過濾某些協議:http://www.cisco.com/c/en/us/td/docs/ios/12_2/ibm/vol1/command/reference/fibm_r1/br1fethc.pdf

下面是關於無線嗅探器痕跡的好思科文檔,其中包含802.11類型/子類型字段的描述:https://supportforums.cisco.com/document/52391/80211-frames-starter-guide-learn-wireless-sniffer-traces