さまざまなUDPパケットのチェックサムを手動で計算しようとしていますが、Wiresharkに表示されているものと比較して常に間違った結果が得られます。以下は私がそれを行う方法の例です:
Source Address: 192.168.0.103 (0xC0A8, 0x0067)
Destination Address: 192.168.0.1 (0xC0A8, 0x0001)
Source Port: 57090 (0xDF02)
Destination Port: 8000 (0x1F40)
Packet length: 19 (0x0013)
Data: hello world (0x6865, 0x6C6C, 0x6F20, 0x776F, 0x726C, 0x6400)
Expected checksum: 0xEDFD (from wireshark)
UDPチェックサムが次の変数で計算されることを理解しています。
Source IP + Destination IP + 17 (0x0011 - protocol code) + 10 (0x000A - pseudoheader length) + Source Port + Destination Port + UDP Packet Length + Data
それらすべてが16ビットのグループになっています。
したがって、私の計算は(同じ順序で)次のようになります。
0xC0A8 + 0x0067 + 0xC0A8 + 0x0001 + 0x0011 + 0x000A + 0xDF02 + 0x1F40 + 0x0013 + 0x6865 + 0x6C6C + 0x6F20 + 0x776F + 0x726C + 0x6400
上記の合計の結果は次のとおりです。
0x511F4
ここで、結果が0xFFFFより大きいため、次のようにします。
0x11F4 + 0x0005 = 0x11F9
ビットを反転した後、結果が得られます。
0xEE06 <- which, as you can see, it is different from the expected one
だから私の質問は私が間違っているのは何ですか?私は常にwiresharkに表示されているもののほとんどの結果を得ています。
以下は、参考として、Wireshark内のパケットのスクリーンショットですhttps://www.evernote.com/l/AWl0H1AGoxpGX4_zjgDlVBcytJM-HP_PvQE
他の誰かが同様の問題を抱えている場合に備えて、私は自分が間違っていたことを見つけました。
疑似ヘッダーを計算する方法は次のとおりです。
Source IP + Destination IP + 17 (0x0011 - protocol code) + 10 (0x000A - pseudoheader length)
問題は長さバイトにありました。疑似ヘッダーの長さではなく、UDPパケットの長さである必要があります。
最終的な式は次のとおりです。
Source IP + Destination IP + 17 (0x0011 - protocol code) + UDP Packet Length + Source Port + Destination Port + UDP Packet Length + Data
UDPパケット長が2回表示されることに注意してください。最初は疑似ヘッダー用で、2番目は実際のUDPヘッダー用です。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加