如何在IEEE802.11框架内找到封装协议?

时间:2017-03-16 13:05:22

标签: c linux network-programming raw-sockets 802.11

我正在使用String res = str.replaceAll("\\\"(\\w+)\\\"\\:","\\\\$1:") 在Linux内部使用原始IEEE802.11开发libpcap帧解析器程序。我可以轻松地解析CRadioTap标题,但我无法找到封装在IEEE802.11 MPDU中的协议名称。遗憾的是,IEEE802.11标头中没有任何字段表示封装协议(如IEEE802.11标题中的protocol字段)。

任何解决方案?

2 个答案:

答案 0 :(得分:2)

对于封装数据的802.11帧,标头类型/子类型将介于0x200x2F之间(尽管该帧通常为0x20(数据)或{ {1}}(QoS-Data))。将有一个5字节的SNAP头,它将包含有效载荷的类型(如this answer中所述)。如果OID(SNAP头的前三个字节)是0x28,则接下来的两个字节是以太网类型。

对于EAPoL(source),以太网类型为0x000000。这是您要检查以了解封装协议的字段(IP为0x888e,ARP为0x0800等。)

以下是有关以太网类型的优秀思科文档以及如何使用它们来过滤某些协议:http://www.cisco.com/c/en/us/td/docs/ios/12_2/ibm/vol1/command/reference/fibm_r1/br1fethc.pdf

以下是有关无线嗅探器跟踪的优秀思科文档,其中包含0x0806类型/子类型字段的说明:https://supportforums.cisco.com/document/52391/80211-frames-starter-guide-learn-wireless-sniffer-traces

答案 1 :(得分:0)

IEEE802.11数据包的数据封装在LLC标题中(参见here):

  

802.11帧应包含LLC标头,当且仅当它是a时   数据框。帧类型和子类型是帧控制的一部分   MAC头中的字段;数据是帧类型值之一(   其他人是控制和管理)。子类型并不重要 - 全部   数据帧应包含LLC标头,不应包含其他帧。

有两种LLC标头:3个字节,8个字节。 IEEE 802.11使用第二个(请参阅here)。在那一个中​​,LLC标头的最后两个字节等同于Ether Type协议中的Ethernet字段。因此,此字段的0x800表示IPv4,例如。