如何查找IEEE802.11帧内封装的协议?

7
我正在使用Linux下的原生C语言和libpcap开发一个IEEE802.11帧解析程序。我可以轻松地解析RadioTap和IEEE802.11头部,但是我无法找到嵌套在IEEE802.11 MPDU中的协议名称。不幸的是,在IEEE802.11头部中没有任何字段指示封装的协议(例如以太网头部中的协议字段)。有什么解决方案吗?

“name”指的是什么?b/g/n…可以在PLCP子层中检索到。 - LPs
@LPs:b/g/n 是 IEEE802.11 标头的一部分。我的意思是,在 WPA 认证的 EAPOL 分组或封装在数据包内的任何其他协议中,都涉及到 802.11X - SuB
我不是专家,但查看wireshark的示例捕获显示,可能存在带有SNAP扩展的逻辑链路控制头(如0xAA所示),当OID == 0x000000时,它可能包含ettertype(请参见此处)。祝好运! - vlp
找到了一张好看的图片(http://flylib.com/books/en/2.519.1.29/1/)。 (并且为了澄清 - 我正在谈论带有帧控制字段识别的“数据帧”) - vlp
1
离题了,因为...这个问题似乎不属于帮助中心定义的编程范围内。 - sigjuice
2个回答

2

IEEE802.11数据包的数据被封装在一个LLC头部中(参见这里):

只有当一个帧是数据帧时,它才应该包含LLC头部。帧类型和子类型是MAC头部中的帧控制字段的一部分。数据是帧类型值之一(其他类型是控制和管理)。子类型并不重要——所有数据帧都应该包含LLC头部,而其他帧则不应该。

LLC头部有两种:3字节和8字节。 IEEE 802.11使用后者(参见这里)。在其中,LLC头部的最后两个字节相当于以太网协议中的Ether Type字段。因此,例如,对于该字段的0x800表示IPv4


2
对于封装数据的 802.11 帧,头类型/子类型将在 0x200x2F 之间(虽然帧通常为 0x20(数据)或 0x28(QoS-数据))。会有一个 5 字节的 SNAP 头,其中包含有效载荷的类型(如此答案中所述)。如果 OID(SNAP 头的前三个字节)为 0x000000,则下面的两个字节是以太网类型。
以太网类型对于 EAPoL 是 0x888e来源)。这是您需要检查的字段,以了解封装的协议(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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接