我正在使用 dpkt 来解析一些 ieee80211 数据包。
我看到创建的 ieee80211 对象有错误的值。
深入挖掘,我发现 ieee80211 将数据视为大端,而实际上我提供的数据包是小端。
有没有办法在运行时检测数据包的字节序,所以我可以在将其提供给 dpkt.ieee80211 之前将其更改为大字节序?
我正在使用 dpkt 来解析一些 ieee80211 数据包。
我看到创建的 ieee80211 对象有错误的值。
深入挖掘,我发现 ieee80211 将数据视为大端,而实际上我提供的数据包是小端。
有没有办法在运行时检测数据包的字节序,所以我可以在将其提供给 dpkt.ieee80211 之前将其更改为大字节序?
不应该有任何东西可以检测或猜测。IEEE 802.11 是一种标准协议,其规范规定了帧的每个部分的正确字节序。如果字节顺序颠倒,则帧格式错误。您可以在此处获取该标准的最新副本。
查看 3500 多页的 pdf(感谢上帝的 ctrl+f),似乎大多数值都是大端的,就像在 TCP/IP 中一样。但显然,这里和那里都使用小端序。例如,在一些 TKIP 领域。坦率地说,这有点令人惊讶。
您没有提到您尝试创建/解码的帧/字段,因此很难说比查找它更具体的内容。
当您不知道一种方式或另一种方式时,您将能够检测字节序的唯一方法是注入有效负载并以相同的方式对其进行解析。
然后,您可以通过检查您注入的有效负载的身份来检查字节顺序。
事实证明,对于 CAPWAP 下的 IEEE80211,帧控制字节只是简单地交换。
这可能是一个最初的错误已经成为事实上的标准案例。
请参阅Wireshark 问答中的答案