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

时间:2012-09-13 13:14:32

标签: wifi wireshark 802.11

我正在分析一个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屏幕截图,帧控制字段的标志部分(最后8位)是0x22,这很好。如何将版本/类型/子类型0x08与Wireshark的框架描述相匹配,这让我感到困惑。

0x08 = 0000 1000b,我认为会转换为版本= 00,Type = 00(我认为这意味着管理而不是 data frame)和Subtype = 1000(我认为它将是一个信标帧)。所以我希望这个帧是一个管理帧,更具体地说,是一个信标帧。然而,Wireshark将其报告为数据框架。令我困惑的第二件事是Wireshark甚至从行0x20中提取Type/Subtype: Data (0x20)

任何人都可以澄清我对802.11 spec / Wireshark捕获的解释以及为什么两者不一致?

3 个答案:

答案 0 :(得分:18)

由于帧控制(FC)的该字节的布局,您示例中的数据帧为0x08。 0x08 = 00001000      - 前4位(0000)是子类型。 0000是此帧的子类型      - 接下来的2位(10)是类型,它是2位小数,因此是数据类型帧      - 最后2位(00)是版本,即0

下表为多种帧类型转换FC的子类型 - 版本字节的十六进制值。将QoS数据与正常数据帧进行比较可能真的有助于减少这种情况。请注意,桌子可能有一两个错误,因为我刚刚把它掀起来。

你是对的,1000是一个信标帧,你只是看错了位。

enter image description here

你有一个radiotap标头,你可以从pcap API获得类似的dec表示:

int type = pkt_data[20] >> 2;

答案 1 :(得分:3)

这是一个常见的错误,并且肯定会多次咬我。

归结为Byte Ordering。

如果要表示一个多字节数字,那么问题是您先放入/发送哪个字节?

自然(人类)字节顺序是首先放置大部分,然后是它之后的较小部分,从左到右,也称为Big Endian。请注意,从程序员的角度来看,每个字节中的位从来都不是错误的方法。

e.g。 1234十进制需要2个字节,04D2十六进制。 你写/发送04 D2,还是D2 04? 第一个是Big-endian,第二个是Little-endian。

为了更加混淆,所涉及的机制可能使用不同的字节顺序。

有网络字节顺序,在这种情况下是Little-endian,架构字节顺序(每个CPU架构可以不同),数据可能在缓冲区中,因此它会根据您是否读取缓冲区而有所不同从上到下,或从下到上。

对于哪些位做什么也可以“倒退”的解释没有帮助,就像你原来的帖子一样。

答案 2 :(得分:0)

我在Windows上使用wireshark version-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

因此,根据我的理解,framecontrol字段中的LSB 8bits将对应于标志。

MSB 8bits将对应于子类型,类型,版本,即在我的情况下0000-subtype& 10-type& 00-version

哪个是子类型0的数据框。

你的案子可能是wireshark的错误。它应该将控制字段显示为0x0822而不是0x2208。

标志字段正确显示为0x22

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

<强> My_capture_file:

enter image description here