Wiresharkを使用せずにパケットを手動で正しく読み取って解釈するにはどうすればよいですか?

イーサネットヘッダーから宛先MACアドレスは(ビット/バイトを変換した後)5番目のバイトにある必要があることを知っています。したがって、このデータから、4a以降になると思いました。ただし、実際には00:17:f2:d0:4c:82です。

IPソースの宛先についても同じことが言えます。たとえば、ソースは13〜16バイトである必要があります。読み取り値は、0800以降である必要があると思います。しかし、実際には0a 32 e7 85にありますが、理由がわかりません。このデータを正しく解釈する方法がわからないか、一般的なヘッダー構造を正しく理解していない可能性があります。

https://ntquan87.wordpress.com/2015/08/17/reading-packet-hex-dumps-manually-no-wireshark/

回答

表示されているのはレベル2イーサネットフレームであるため、プリアンブルがありません。また、イーサネットチェックサムが欠落しているようです。この場合、すべてが揃っているように見えます(イーサネットフレーム内のパケットタイプ、IPv4バージョン、IPv4パケット長、パケットタイプ、つまりIPパケット内のTCPなど)。次に、図のようにパケットを読み取ります。

パケット

TCPペイロードは

474554202f20485454502f312e300d0a 557365722d4167656e743a2057676574 2f312e31312e340d0a4163636570743a 202a2f2a0d0a486f73743a207777772e 696574662e6f72670d0a436f6e6e6563 74696f6e3a204b6565702d416c697665 0d0a0d0a 

であり、次のようにデコードされます:

GET / HTTP/1.0 User-Agent: Wget/1.11.4 Accept: */* Host: www.ietf.org Connection: Keep-Alive 

これは宛先ポートが80であるという事実と一致しています。

コメント

  • 誤って送信元と宛先のラベルを交換したためです。 。私の悪い。画像を更新しました。IPv4ヘッダーはIPv4パケットの長さが152バイトである、つまりデータの最後で終了することを示しているため、チェックサムはありません。最後のバイトがすべてであることが簡単にわかります。デコードされたバージョンによるペイロードの一部('はHTTPGETリクエストです)。
  • 私は' 'これらの番号をどこから取得しているかわかりません。イーサネットペイロード(IPv4パケット)は15番目のバイトから始まります。 enを参照してください。 .wikipedia.org / wiki / Ethernet_frame 。I内Pv4パケット、その長さは3バイト目と4バイト目です。 en.wikipedia.org/wiki/IPv4#Packet_structure を参照してください。したがって、長さは0x0098(16進数)、つまり152バイトです。これは、IPv4パケット全体の長さです(図の青い境界線のあるボックス)。
  • 'から番号を取得している場所を理解しました。投稿した図を間違った方法で読んでいます!イーサネット宛先アドレスの長さは32ビットではありません! ' 48ビット= 6バイト…図では、"宛先MACアドレス"フィールドは2行目の終わりで終了しませんが、3行目でも継続します(空白では、" | "セパレーター)。同じことが送信元アドレスにも当てはまります(3行目の空のスペースから始まり、4行目で終わります)。わかりにくい図を使用することをお勧めします…
  • '回答で送信元と宛先のMACアドレスが入れ替わっている理由がわかりません。それはあなたに答えを与えた人にとっては良い質問のように聞こえます… IPパケットに関して、私は' IPヘッダーチェックサムを削除したい理由がわかりませんか??図から、IPパケットの"送信元アドレス"フィールドの前には正確に12バイトがあります。これは私の図と完全に一致します。
  • アプリケーション層プロトコルは HTTP です。フラグはバイナリで000011000に設定されます。 フラグのリストを見ると、' 5番目と6番目のフラグ(setに対応)がわかります。ビット)はACKとPSHです。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です