802.11 Wireshark跟踪中解释帧控制字节

13
我有一个Wi-Fi捕获文件(.pcap),正在进行分析,发现在802.11规范和Wireshark对数据的解释之间存在不一致。具体而言,我试图分离的是2字节的802.11帧控制字段。该帧控制字段的子字段格式如下(取自http://www4.ncsu.edu/~aliu3/802.bmp):

Frame control subfields.

以下是一张Wireshark屏幕截图,显示了让我感到困惑的数据包:

Confusing Frame Control in Wireshark

根据Wireshark的截图,Frame Control字段的标志部分(最后8位)为0x22,这是正常的。我困惑的是版本/类型/子类型为 0x08 如何与Wireshark对帧的描述相匹配。 0x08 = 0000 1000b ,我认为这将转换为版本= 00 ,类型= 00 (我认为这意味着管理而不是数据帧),子类型= 1000 (我认为这将是信标帧)。因此,我期望这个帧是一个管理帧,更具体地说,是一个信标帧。然而,Wireshark将其报告为数据帧。让我困惑的第二件事是Wireshark在Type/Subtype:Data(0x20)行中从哪里提取 0x20 。是否有人可以为我澄清802.11规范/Wireshark捕获的解释以及这两者为什么不一致?

2
我的猜测是,这个字节的解释是反向的,就像以最低有效位为先传输以太网帧一样。因此,您将得到:子类型 = 0000b,类型 = 10b / 0x2,版本 = 00b,表示类型和子类型的一个合理方法是 type << 4&subtype,即在这种情况下为 0x20。我很乐意由有知识的人确认或否认这一点。 - legoscia
3个回答

18
您的示例中的数据帧是0x08,这是由于帧控制(FC)字节的布局所造成的。0x08 = 00001000 - 前4位(0000)是子类型。0000是此帧的子类型。 - 接下来的2位(10)是类型,为十进制2,因此是数据类型帧。 - 最后的2位(00)是版本,为0。
下表将FC的子类型-类型-版本字节的十六进制值翻译为几种帧类型。将QoS数据与普通数据帧进行比较可能会有所帮助,但请注意,该表可能会有一两个错误,因为我只是草草制作了它。
您说得对,1000是信标帧,只是您看错了位。

enter image description here

你有一个radiotap头,可以使用pcap API获取类型的十进制表示:

int type = pkt_data[20] >> 2;

3

这是一个常见的错误,在IT技术中多次被遇到。

它与字节顺序有关。

当您需要表示多个字节的数字时,问题就出现了:你应该先放/发送哪个字节?

自然(人类)字节顺序是先放大部分,然后是小部分,从左到右,也称为大端序。请注意,每个字节中的位从程序员的角度来看永远不会颠倒。

例如,1234十进制需要2个字节,04D2十六进制。 您应该写/发送04 D2还是D2 04? 前者是大端序,后者是小端序。

更令人困惑的是,所涉及的机制可能使用不同的字节顺序。

存在网络字节顺序,在这种情况下是小端序,体系结构字节顺序(每个CPU架构可能不同),并且数据可能在缓冲区中,因此这将取决于您是从上到下读取缓冲区还是从下到上读取缓冲区。

说明哪些位做什么也可能是“反向”的,就像您原始帖子中一样,这也没有帮助。


0

我正在Windows上使用wireshark版本2.4.3。我的数据帧捕获文件如下所示。

Frame control field = 0x0842 i.e., in binary format 0000 1000 0100 0010 
Framecontrol flag field = 0x42.i.e., in binary format 0100 0010

据我所知,帧控制字段中的LSB 8位将对应于标志。

MSB 8位将对应于子类型、类型、版本,即在我的情况下0000-子类型10-类型00-版本

这是子类型为0的数据帧。

在你的情况下,这可能是wireshark的错误。它应该将帧控制字段显示为0x0822而不是0x2208。

标志字段正确显示为0x22

在我的情况下,我使用的是wireshark-2.4.3,帧控制字段的显示是正确的,0x0842,其中标志为0x42

我的捕获文件:

enter image description here


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