【发布时间】:2017-12-22 01:10:15
【问题描述】:
我正在使用 dpkt 来解析一些 ieee80211 数据包。
我看到创建的 ieee80211 对象的值有误。
深入挖掘,我发现 ieee80211 将数据视为大端,而实际上我提供的数据包是小端。
有没有办法在运行时检测数据包的字节序,以便我可以在将其提供给 dpkt.ieee80211 之前将其更改为大字节序?
【问题讨论】:
标签: endianness pcap dpkt
我正在使用 dpkt 来解析一些 ieee80211 数据包。
我看到创建的 ieee80211 对象的值有误。
深入挖掘,我发现 ieee80211 将数据视为大端,而实际上我提供的数据包是小端。
有没有办法在运行时检测数据包的字节序,以便我可以在将其提供给 dpkt.ieee80211 之前将其更改为大字节序?
【问题讨论】:
标签: endianness pcap dpkt
事实证明,对于 CAPWAP 下的 IEEE80211,帧控制字节只是简单地交换了。
这可能是一个初始错误已成为事实标准的案例。
请参阅Wireshark Q&A中的答案
【讨论】:
不应该有任何东西可以检测或猜测。 IEEE 802.11 是一种标准协议,其规范规定了帧的每个部分的正确字节序。如果字节顺序颠倒,则帧格式错误。您可以获取标准here 的最新副本。
查看 3500 多页的 pdf(感谢上帝 ctrl+f),似乎大多数值都是大端的,就像在 TCP/IP 中一样。但显然,这里和那里都使用 little-endian。例如,在一些 TKIP 领域。坦率地说,这有点令人惊讶。
您没有提到您尝试创建/解码的帧/字段,因此很难说比查找更具体的内容。
【讨论】:
IEEE80211_COMMON_OPT_BROKEN_FC 标志传递给了解剖,但他们似乎既没有按名称 (wlan_bsfc) 也没有按句柄调用 dissect_ieee80211_bsfc(因为注册后没有保存句柄)。我建议询问 ask.wireshark.org 或他们的开发邮件列表 - wireshark.org/lists。也许 Wireshark 开发人员可以提供帮助。
当您不知道其中一种方式时,您能够检测字节顺序的唯一方法是注入有效负载并以相同的方式对其进行解析。
然后,您可以通过检查您注入的有效负载的身份来检查字节顺序。
【讨论】: