2017-07-17 10 views
4

私はdickを使用していくつかのieee80211パケットを解析しています。
作成したieee80211オブジェクトの値が間違っています。
深く掘り下げて見ると、ieee80211はデータをビッグエンディアンとして扱いますが、実際にはそれを提供しているパケットはリトルエンディアンです。リトルエンディアンパケットがdpktによってビッグエンディアンとして扱われます

実行時にパケットのエンディアンを検出する方法があるので、dpkt.ieee80211に提供する前にビッグエンディアンに変更することができますか?

答えて

1

一方的なやり方がわからないときにエンディアンを検出できる唯一の方法は、ペイロードを注入して同じように解析することです。

次に、注入したペイロードの身元を確認してエンディアンをチェックできます。

2

検出または推測するものがありません。 IEEE802.11は標準的なプロトコルであり、その仕様はフレームの各部分毎に正しいエンディアンを述べている。エンディアンが逆転した場合、フレームの形式が正しくありません。最新のhereのコピーを入手できます。

3500+ページpdf(ctrl + fのために神に感謝)を見れば、ほとんどの値はTCP/IPのようにビッグエンディアンであるようです。しかし、明らかに、ここではリトルエンディアンが使用されています。たとえば、一部のTKIPフィールドでは、率直に言って、それはちょっと驚くべきことです。

あなたが作成/デコードしようとしているフレーム/フィールドについて言及していないので、それを調べるよりも具体的なものを言うのは難しいです。

+0

フィールドはフレームコントロールです。 IEEE802.11の最初のバイトは02で、2番目のバイトは08です。Wiresharkは何とかこれらの2バイトをスワップし、これがデータフレーム(0000 ** 10 ** 00の10の部分です。 08は2番目のバイトですが、最初のバイトになると思います)。 – kroiz

+0

これは役に立ちますか? https://stackoverflow.com/questions/12407145/interpreting-frame-control-bytes-in-802-11-wireshark-trace – Malt

+0

その質問のWiresharkスクリーンショットでは、あなたにリンクすると、wiresharkが** (Normal)**を "Frame Control"ラインに追加します。私のpcap上でWiresharkは**(スワップされた)**と言っています。そしてその質問の最初のバイトは08で、私のpcap 08では2番目のバイトです。だから、Wiresharkが私のIEEE80211で第一バイトと第二バイトを入れ替える必要があることを理解していた人もいます。私はちょうど方法を取得しないでください。 – kroiz

0

CAPWAPでのIEEE80211の場合、フレーム制御バイトは単純に入れ替えられます。
これはおそらく、初期の間違いのない、事実上の標準的なケースです。
回答を参照してくださいWireshark Q&A

関連する問題