【问题标题】:Little endian packet treated as big endian by dpkt小端数据包被 dpkt 视为大端
【发布时间】:2017-12-22 01:10:15
【问题描述】:

我正在使用 dpkt 来解析一些 ieee80211 数据包。
我看到创建的 ieee80211 对象的值有误。
深入挖掘,我发现 ieee80211 将数据视为大端,而实际上我提供的数据包是小端。

有没有办法在运行时检测数据包的字节序,以便我可以在将其提供给 dpkt.ieee80211 之前将其更改为大字节序?

【问题讨论】:

    标签: endianness pcap dpkt


    【解决方案1】:

    事实证明,对于 CAPWAP 下的 IEEE80211,帧控制字节只是简单地交换了。
    这可能是一个初始错误已成为事实标准的案例。
    请参阅Wireshark Q&A中的答案

    【讨论】:

      【解决方案2】:

      不应该有任何东西可以检测或猜测。 IEEE 802.11 是一种标准协议,其规范规定了帧的每个部分的正确字节序。如果字节顺序颠倒,则帧格式错误。您可以获取标准here 的最新副本。

      查看 3500 多页的 pdf(感谢上帝 ctrl+f),似乎大多数值都是大端的,就像在 TCP/IP 中一样。但显然,这里和那里都使用 little-endian。例如,在一些 TKIP 领域。坦率地说,这有点令人惊讶。

      您没有提到您尝试创建/解码的帧/字段,因此很难说比查找更具体的内容。

      【讨论】:

      • 该字段是框架控件。 IEEE802.11 的第一个字节是 02,第二个字节是 08。Wireshark 不知何故知道交换这两个字节并认为这是一个数据帧(00001000 的第 10 部分这是 08,这是第二个字节,但我希望是第一个)。
      • 在您链接到的那个问题的 Wireshark 屏幕截图中,您可以看到 Wireshark 在“帧控制”行上显示 (Normal)。在我的 pcap Wireshark 上说 (Swapped)。该问题的第一个字节是 08,而在我的 pcap 中,08 是第二个字节。所以,我认为 Wireshark 是如何理解在我的 IEEE80211 中第一个和第二个字节需要交换的。我只是不明白怎么做。
      • 我明白了。这可能是一些错误的实现变得足够普遍,成为标准的事实上的一部分。这些事情发生。我们应该查看这些帧的wireshark解析器代码,看看它们如何决定是否翻转这些字节。 0208 可能只是一个无效值,而 0802 可以吗?
      • 不幸的是,我遇到了同样的问题。我看到了注册,IEEE80211_COMMON_OPT_BROKEN_FC 标志传递给了解剖,但他们似乎既没有按名称 (wlan_bsfc) 也没有按句柄调用 dissect_ieee80211_bsfc(因为注册后没有保存句柄)。我建议询问 ask.wireshark.org 或他们的开发邮件列表 - wireshark.org/lists。也许 Wireshark 开发人员可以提供帮助。
      【解决方案3】:

      当您不知道其中一种方式时,您能够检测字节顺序的唯一方法是注入有效负载并以相同的方式对其进行解析。

      然后,您可以通过检查您注入的有效负载的身份来检查字节顺序。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多