Tshark でカスタムプロトコルをデコードする

WiresharkWiresharkBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、Wireshark のコマンドラインツール tshark を使用して、カスタムネットワークプロトコルを分析およびデコードする方法を学びます。詳細な出力でパケットキャプチャファイルを調査し、非標準ポートでのトラフィックを HTTP プロトコルとしてデコードする練習を行います。

演習では、-r-V-d などの重要なフラグを使用して、パケットデータを操作し、ポートの詳細を確認し、デコード結果を保存する方法を案内します。これらのスキルを使えば、実際のネットワーク分析タスクでカスタムプロトコルのシナリオを処理することができます。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL wireshark(("Wireshark")) -.-> wireshark/WiresharkGroup(["Wireshark"]) wireshark/WiresharkGroup -.-> wireshark/protocol_dissection("Protocol Dissection") wireshark/WiresharkGroup -.-> wireshark/export_packets("Exporting Packets") wireshark/WiresharkGroup -.-> wireshark/packet_analysis("Packet Analysis") wireshark/WiresharkGroup -.-> wireshark/commandline_usage("Command Line Usage") subgraph Lab Skills wireshark/protocol_dissection -.-> lab-548921{{"Tshark でカスタムプロトコルをデコードする"}} wireshark/export_packets -.-> lab-548921{{"Tshark でカスタムプロトコルをデコードする"}} wireshark/packet_analysis -.-> lab-548921{{"Tshark でカスタムプロトコルをデコードする"}} wireshark/commandline_usage -.-> lab-548921{{"Tshark でカスタムプロトコルをデコードする"}} end

-r capture.pcap -V でポートを調査する

このステップでは、Wireshark のコマンドラインツール tshark を使用して、パケットキャプチャファイル内のネットワークポートを調査する方法を学びます。ネットワークポートは、異なるアプリケーションがネットワークを介して通信できるようにする「ドア」のようなものです。-r フラグを使用してパケットキャプチャファイルを読み取り、-V を使用して詳細なパケット情報を表示します。これは、ネットワークトラフィックを理解するために不可欠です。

まず、実験ファイルが保存されている正しいディレクトリにいることを確認します。

cd ~/project

この実験では、サンプルのパケットキャプチャファイル capture.pcap が用意されています。このファイルには、分析するための記録されたネットワークトラフィックが含まれています。このキャプチャファイル内のポートを調査するには、次のコマンドを実行します。

tshark -r capture.pcap -V | less

このコマンドを分解して説明します。

  • -r capture.pcap は、tshark にパケットキャプチャファイルから読み取るよう指示します。
  • -V は、詳細出力を有効にし、利用可能なすべてのパケット詳細を表示します。
  • | less は、出力を less プログラムにパイプして、スクロールを容易にします。

詳細出力には、次のような重要なネットワーク情報が表示されます。

  • 各パケットの送信元ポートと宛先ポート(これらはどのアプリケーションが通信しているかを識別します)
  • プロトコル情報(どのタイプの通信が行われているか)
  • パケットのタイムスタンプ(通信が行われた時刻)
  • その他のプロトコル固有の詳細(追加の技術情報)

出力を見やすくするために、less を使用しています。次のように操作してナビゲートできます。

  • 矢印キーを使用して上下にスクロールします。
  • パケットの調査が終了したら、q を押して終了します。

次のような出力例が表示されることがあります。

Frame 1: 74 bytes on wire (592 bits), 74 bytes captured (592 bits)
Ethernet II, Src: 00:1a:2b:3c:4d:5e, Dst: 00:5e:4d:3c:2b:1a
Internet Protocol Version 4, Src: 192.168.1.100, Dst: 192.168.1.1
Transmission Control Protocol, Src Port: 54321, Dst Port: 80, Seq: 1, Ack: 1, Len: 0

この例では、次の点に特に注意してください。

  • Src Port: 54321 - 送信コンピュータのポート番号
  • Dst Port: 80 - 受信コンピュータのポート番号(ポート 80 は通常、HTTP ウェブトラフィックを示します)

これらのポート番号を理解することで、ネットワークを介して通信しているアプリケーションやサービスを識別することができます。

-d tcp.port==8080,http でポート 8080 を HTTP としてデコードする

このステップでは、Tshark にポート 8080 のネットワークトラフィックを HTTP プロトコルとして解釈するよう手動で指示する方法を探ります。アプリケーションが HTTP 通信に非標準ポートを使用する場合、Tshark はそれを自動的にウェブトラフィックとして認識しないため、この技術は不可欠になります。

まず、キャプチャファイルが保存されている作業ディレクトリに移動しましょう。これにより、正しいパケットキャプチャファイルを操作していることが保証されます。

cd ~/project

次に、Tshark の強力なデコード機能を使用します。次のコマンドは、パケットキャプチャを読み取り、特別なデコードルールを適用します。

tshark -r capture.pcap -d tcp.port==8080,http | less

ここで魔法の役割を果たす -d パラメータを分解してみましょう。

  • tcp.port==8080 は、Tshark にポート 8080 を通る TCP トラフィックに焦点を当てるよう指示します。
  • http は、このトラフィックを HTTP プロトコルとして解釈したいことを指定します。

成功すると、次のように適切にフォーマットされた HTTP コンテンツが表示されます。

Hypertext Transfer Protocol
    GET /index.html HTTP/1.1\r\n
    Host: example.com\r\n
    User-Agent: curl/7.68.0\r\n
    Accept: */*\r\n
    \r\n

この出力は、HTTP リクエストヘッダーを明確に示しており、デコードが正常に機能したことを確認できます。-d オプションがない場合、同じトラフィックは生の TCP セグメントとして表示され、ウェブ通信の分析がはるかに困難になります。less へのパイプは、分析のために出力をスクロールしやすくするだけです。

-V でデコードを確認する

このステップでは、ポート 8080 の HTTP デコード設定が正しく機能しているかを検証します。パケットが期待通りにデコードされないことがあるため、設定を確認することは重要です。各パケットの詳細なプロトコル情報を表示するために、Wireshark の詳細モード(-V フラグ)を使用します。

まず、キャプチャファイルが保存されている作業ディレクトリに移動しましょう。

cd ~/project

次に、デコードルールと詳細出力を両方使用して tshark を実行します。このコマンドは、前のステップで学んだ内容を組み合わせたものです。

tshark -r capture.pcap -d tcp.port==8080,http -V | less

各部分の機能は次の通りです。

  • -r capture.pcap はパケットキャプチャファイルを読み取ります。
  • -d tcp.port==8080,http はポート 8080 に HTTP デコードルールを適用します。
  • -V は詳細出力を有効にし、すべてのプロトコル詳細を表示します。
  • | less は長い出力をスクロールしやすくします。

出力を調べる際には、HTTP デコードが成功したことを確認する次の重要な要素に注目してください。

  1. アプリケーション層プロトコルとして HTTP を示すプロトコル階層(これは tshark がそれを HTTP トラフィックとして認識していることを意味します)
  2. HTTP リクエスト/レスポンスヘッダー(これらは明確に表示され、適切にフォーマットされている必要があります)
  3. HTTP ペイロードコンテンツ(実際に送信されるデータ)

正しくデコードされた HTTP トラフィックの例を次に示します。

Hypertext Transfer Protocol
    GET /test.html HTTP/1.1\r\n
    Host: example.com:8080\r\n
    Connection: keep-alive\r\n
    User-Agent: Mozilla/5.0\r\n
    \r\n
    [Full request URI: http://example.com:8080/test.html]

デコードの違いをよりよく理解するために、この出力を HTTP デコードを適用していないステップ 1 の出力と比較してみてください。デコードを行わない場合、同じトラフィックはここで見られる明確な HTTP 構造のない生の TCP データとして表示されることに気付くはずです。

-w decoded.pcap でデコード済みのファイルを保存する

このステップでは、デコードした HTTP トラフィックを新しいファイルに保存します。これは、元のパケットデータをそのままにしながら、行ったプロトコルデコード作業をすべて保存するために重要です。編集後のドキュメントを保存するように、両方のバージョンを残したいと考えてください。

まず、正しい作業ディレクトリにいることを確認しましょう。cd コマンドはディレクトリを変更し、プロジェクトフォルダに移動します。

cd ~/project

次に、Tshark を使用して、デコードした HTTP トラフィックを含む新しいキャプチャファイルを作成します。このコマンドは複雑に見えるかもしれませんが、一つずつ分解して説明します。

tshark -r capture.pcap -d tcp.port==8080,http -w decoded.pcap

このコマンドの各部分を理解しましょう。

  • -r capture.pcap は Tshark に元のキャプチャファイルから読み取るよう指示します。
  • -d tcp.port==8080,http は、ポート 8080 のトラフィックを HTTP として扱う特別なデコードルールを適用します。
  • -w decoded.pcap は、新しいデコード済みバージョンを保存する場所を指定します。

これを実行した後、新しいファイルが正常に作成されたことを確認する必要があります。ls コマンドはファイルを一覧表示し、-lh は人間が読みやすい形式で詳細を表示します。

ls -lh decoded.pcap

新しいファイルが表示される次のような出力が見られます。

-rw-r--r-- 1 labex labex 1.2M Sep 15 10:30 decoded.pcap

この新しいファイルには元のパケットがすべて含まれていますが、ポート 8080 のトラフィックはすべて HTTP プロトコルとして正しく解釈されるようになり、将来の調査でウェブトラフィックを分析するのがはるかに容易になります。

まとめ

この実験では、tshark を使用してカスタムネットワークプロトコルを分析およびデコードする方法を学びました。-r フラグを使用してパケットキャプチャファイルを読み取り、-V フラグを使用して詳細なパケット情報を調べることで、非標準の HTTP トラフィックを特定する練習を行いました。

さらに、-d フラグを適用してポート 8080 のトラフィックを HTTP として解釈することで、プロトコルデコードを探索しました。この実験では、-w フラグを使用してデコードされた出力を新しいファイルに保存し、将来の参照や分析に利用する方法も学びました。