【问题标题】:Interpreting Frame Control bytes in 802.11 Wireshark trace解释 802.11 Wireshark 跟踪中的帧控制字节
【发布时间】:2012-09-06 14:14:07
【问题描述】:

我正在分析一个 Wi-Fi 捕获 (.pcap),发现在我看来,802.11 规范与 Wireshark 对数据的解释之间存在不一致。具体来说,我要分解的是 2 字节 802.11 Frame Control 字段。

取自http://www4.ncsu.edu/~aliu3/802.bmp,Frame Control字段的子字段格式如下:

下面是让我困惑的数据包的 Wireshark 屏幕截图:

因此,根据 Wireshark 屏幕截图,帧控制字段的标志部分(最后 8 位)是 0x22,这很好。 0x08 的版本/类型/子类型如何与 Wireshark 对框架的描述相匹配,这让我感到困惑。

0x08 = 0000 1000b,我认为这将转换为 Version = 00,Type = 00(我认为是 management 而不是 data帧)和子类型=1000(我认为这将是一个信标帧)。所以我希望这个帧是一个管理帧,更具体地说,是一个信标帧。然而,Wireshark 将其报告为数据框。令我困惑的第二件事是 Wireshark 甚至从 Type/Subtype: Data (0x20) 行中拉出 0x20。

谁能为我澄清我对 802.11 规范/Wireshark 捕获的解释以及为什么两者不一致?

【问题讨论】:

  • 我最好的猜测是这个字节被反向解释,就像以太网帧首先传输 LSB。因此你会得到:subtype = 0000b, type = 10b / 0x2, version = 00b,而将类型和子类型一起表示的合理方法是type << 4 & subtype,即0x20案子。不过,我很乐意让知识渊博的人确认或否认这一点。

标签: wireshark wifi


【解决方案1】:

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

下表将 FC 的 subtype-type-version 字节的十六进制值转换为几种帧类型。将 QoS 数据与正常数据帧进行比较可能真的有助于解决这个问题。请注意,表格可能有一两个错误,因为我刚刚整理了一下。

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

您有一个 radiotap 标头,您可以从 pcap API 中获取该类型的 dec 表示形式:

int type = pkt_data[20] >> 2;

【讨论】:

    【解决方案2】:

    这是一个常见的错误,肯定已经咬过我好几次了。

    这取决于字节顺序。

    当你有一个多字节数来表示时,问题就出现了,你首先放置/发送哪个字节?

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

    例如十进制的 1234 需要 2 个字节,十六进制的 04D2。 你写/发送 04 D2 还是 D2 04 ? 第一个是大端,第二个是小端。

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

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

    正如您原来的帖子中那样,解释哪些位的作用也可能是“向后”的,这无济于事。

    【讨论】:

      【解决方案3】:

      我在 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 8 位将对应于子类型、类型、版本,即在我的情况下为 0000-subtype 和 10-type 和 00-version。

      这是子类型0的数据框。

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

      标志字段正确显示为0x22。

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

      My_capture_file:

      【讨论】:

        猜你喜欢
        • 2017-09-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多