Tshark で TCP 会話を分析する

WiresharkBeginner
オンラインで実践に進む

はじめに

この実験では、Wireshark のコマンドラインツール tshark を使用して TCP 会話を分析する方法を学びます。フィルターを使用して TCP トラフィックをキャプチャし、会話を一覧表示し、HTTP(ポート 80)などの特定のポートを調べながら、詳細なパケット情報を解釈する練習を行います。

curl を使用したトラフィック生成やキャプチャファイルの分析などの実践的な演習を通じて、TCP ストリームを分離し、重要な会話メトリクスを特定する方法を習得します。これらのスキルは、Wireshark を使用したネットワークのトラブルシューティングとトラフィック分析能力を向上させます。

-f "tcp" で TCP トラフィックをキャプチャする

このステップでは、Wireshark のコマンドラインツール tshark を使用して TCP ネットワークトラフィックをキャプチャする方法を学びます。TCP(Transmission Control Protocol)はインターネットの核心プロトコルの 1 つで、アプリケーション間の信頼性の高いデータ伝送を担当します。-f "tcp" フィルターを使用することで、TCP パケットに特化してキャプチャでき、ウェブブラウジング、ファイル転送、または電子メール通信の分析に役立ちます。

  1. まず、LabEx 仮想マシン(VM)でターミナルを開きます。Xfce デスクトップのターミナルアイコンをクリックするか、ショートカット Ctrl+Alt+T を使用します。このターミナルで、このネットワーク分析に関するすべてのコマンドを実行します。

  2. キャプチャファイルを保存するデフォルトの作業ディレクトリに移動します。

    cd ~/project
    

    これにより、キャプチャしたすべてのデータが後で見つけやすい一貫した場所に保存されます。

  3. 次のコマンドで TCP トラフィックのキャプチャを開始します。

    sudo tshark -f "tcp" -w tcp_capture.pcap
    

    このコマンドの各部分が何をするかを分解して説明します。

    • sudo は、パケットキャプチャに必要な管理者権限を付与します。
    • tshark は Wireshark のコマンドラインバージョンです。
    • -f "tcp" はキャプチャフィルターとして機能し、tshark に TCP パケットのみを記録するよう指示します。
    • -w tcp_capture.pcap は、キャプチャしたパケットを "tcp_capture.pcap" という名前のファイルに保存します。
  4. tshark が実行中の間、いくつかのサンプル TCP トラフィックを生成する必要があります。別のターミナルウィンドウを開き、次のコマンドを実行します。

    curl https://www.example.com
    

    このコマンドは、example.com への単純なウェブリクエストを行います。この通信には TCP が使用されます。curl コマンドは、ウェブサイトから返された HTML コンテンツを表示します。

  5. 十分なデータをキャプチャするために数秒待った後、tshark が実行されている最初のターミナルで Ctrl+C を押してキャプチャを停止します。これにより、パケットキャプチャプロセスが安全に終了します。

  6. ここで、キャプチャファイルの最初の数行を調べることで、キャプチャした内容を確認しましょう。

    tshark -r tcp_capture.pcap | head -n 5
    

    このコマンドは、キャプチャファイルを読み取り(-r)、最初の 5 つのパケットを表示します。TCP ハンドシェイクプロセスを示す出力が表示されるはずです。これには以下が含まれます。

    • 接続を開始する SYN(同期)パケット
    • SYN - ACK(同期 - 確認)応答
    • 送信元と宛先の IP アドレス
    • 通信に使用されているポート番号

-z conv,tcp で会話を一覧表示する

このステップでは、Wireshark の -z conv,tcp オプションを使用して、キャプチャしたトラフィックから TCP 会話を分析する方法を学びます。TCP 会話は、IP アドレスとポート番号で識別される 2 つのエンドポイント間の完全な通信セッションを表します。この機能は、キャプチャ内のすべての TCP 会話の概要を提供し、送信元/宛先の IP アドレス、ポート、およびパケット統計を表示します。これは、ネットワーク通信パターンを理解するために不可欠です。

  1. まず、キャプチャファイルが保存されている正しいディレクトリにいることを確認します。Tshark がパケットキャプチャファイルの場所を知る必要があるため、これは重要です。

    cd ~/project
    
  2. TCP 会話を一覧表示する基本コマンドは、キャプチャしたパケットを分析し、概要表を表示します。-r フラグは入力ファイルを指定し、-z conv,tcp は会話統計機能を有効にします。

    tshark -r tcp_capture.pcap -z conv,tcp
    
  3. 出力は、すべての TCP 会話を示す表を表示します。これは次の例と似ています。各行は 2 つのエンドポイント間の 1 つの会話を表し、各方向に転送されたフレーム(パケット)数とバイト数を示します。

    =========================================================================
    TCP Conversations
    Filter:<No Filter>
                                                  |       <-      | |       ->      | |     Total     |
                                                  | Frames  Bytes | | Frames  Bytes | | Frames  Bytes |
    192.168.1.2:49152   <-> 93.184.216.34:80     |      3    180 | |      3    216 | |      6    396 |
    =========================================================================
    
  4. 各会話が発生した絶対タイムスタンプを含むより詳細な表示を得るには、-t ad オプションを使用します。これは、ネットワークイベントのタイミングと順序を理解するのに役立ちます。

    tshark -r tcp_capture.pcap -z conv,tcp -t ad
    
  5. -Y オプションを使用して表示フィルターを指定することで、特定の条件で会話をフィルタリングできます。この例では、ポート 80(HTTP トラフィック)を含む会話をフィルタリングします。これは、ウェブトラフィックのみを分析したい場合に便利です。

    tshark -r tcp_capture.pcap -z conv,tcp -Y "tcp.port==80"
    
  6. 会話統計を後で分析またはレポートするために保存するには、出力をテキストファイルにリダイレクトします。これにより、分析の永続的な記録が作成され、後で確認したり、他の人と共有したりできます。

    tshark -r tcp_capture.pcap -z conv,tcp > tcp_conversations.txt
    

-Y "tcp.port==80" で特定のポートをフィルタリングする

このステップでは、Wireshark の表示フィルタ構文と -Y "tcp.port==80" オプションを使用して、特定の TCP ポート(ポート 80)のネットワークトラフィックをフィルタリングする方法を学びます。ポート 80 は HTTP ウェブトラフィックの標準ポートです。したがって、このフィルタを使用すると、ネットワークキャプチャ内のウェブ関連の通信を分離することができます。

始める前に、このフィルタの機能を理解しましょう。このフィルタは、送信元ポートまたは宛先ポートが 80 であるすべての TCP パケットを表示します。これは、送信元または宛先ポートを具体的にフィルタリングする場合とは異なります。これについては後で説明します。

  1. まず、キャプチャファイルが保存されている正しいディレクトリにいることを確認します。

    cd ~/project
    
  2. 以前にキャプチャしたトラフィックをポート 80(HTTP)についてフィルタリングするには、次のコマンドを実行します。

    tshark -r tcp_capture.pcap -Y "tcp.port==80"
    

    -r フラグは入力ファイルを指定し、-Y は表示フィルタを適用します。このコマンドは tcp_capture.pcap からパケットを読み取りますが、ポート 80 を含むパケットのみを表示します。

  3. 出力は、送信元または宛先としてポート 80 を含むパケットのみを表示します。

     1 0.000000000    192.168.1.2 → 93.184.216.34 TCP 74 49152 → 80 [SYN] Seq=0 Win=64240 Len=0 MSS=1460
     2 0.028763000  93.184.216.34 → 192.168.1.2 TCP 74 80 → 49152 [SYN, ACK] Seq=0 Ack=1 Win=65535 Len=0
     3 0.028852000    192.168.1.2 → 93.184.216.34 TCP 66 49152 → 80 [ACK] Seq=1 Ack=1 Win=64240 Len=0
    

    この出力は、クライアント(192.168.1.2)とウェブサーバー(93.184.216.34)間の完全な TCP 3 ウェイハンドシェイク(SYN、SYN - ACK、ACK)を示しています。

  4. ポート 80(宛先ポート)に向かうトラフィック、つまりウェブサーバーへのリクエストを具体的にフィルタリングするには、次のコマンドを実行します。

    tshark -r tcp_capture.pcap -Y "tcp.dstport==80"
    
  5. ポート 80(送信元ポート)からのトラフィック、つまり通常はウェブサーバーの応答をフィルタリングするには、次のコマンドを実行します。

    tshark -r tcp_capture.pcap -Y "tcp.srcport==80"
    
  6. これを他のフィルタと組み合わせることで、より詳細な分析を行うことができます。たとえば、HTTP GET リクエスト(最も一般的なウェブリクエストのタイプ)のみを表示するには、次のコマンドを実行します。

    tshark -r tcp_capture.pcap -Y "tcp.port==80 && http.request.method==GET"
    

    これは、ポートフィルタと HTTP プロトコルフィルタを組み合わせて、ウェブブラウザがサーバーからページを要求する具体的なタイミングを表示します。

-V で結果を表示する

このステップでは、Wireshark の -V(詳細表示)オプションを使用して、包括的なパケット詳細を表示する方法を探ります。ネットワークの問題をトラブルシューティングする際に、完全なプロトコルの分解を見ることは非常に重要です。-V フラグを使用すると、イーサネットフレームからアプリケーション層プロトコルまで、ネットワークスタックの各層が明らかになり、ネットワークトラフィックで何が起こっているのかを正確に理解するのに役立ちます。

  1. まず、キャプチャファイルが保存されている正しいディレクトリにいることを確認します。Tshark が分析したいファイルにアクセスする必要があるため、これは重要です。

    cd ~/project
    
  2. すべてのパケット詳細を表示する基本コマンドは、Tshark がデコードできるすべての情報を表示します。ネットワーク通信の完全な構造を調べる必要がある場合に便利です。

    tshark -r tcp_capture.pcap -V
    
  3. 詳細出力は、技術的な詳細を構造化された形式で表示します。以下は各部分の意味です。

    • フレーム(Frame): パケットサイズに関する物理層の情報
    • イーサネット II(Ethernet II): データリンク層の MAC アドレス
    • IP: ネットワーク層のアドレッシング
    • TCP: トランスポート層のポートとシーケンス番号
    Frame 1: 74 bytes on wire (592 bits), 74 bytes captured (592 bits)
    Ethernet II, Src: 00:11:22:33:44:55, Dst: 66:77:88:99:aa:bb
    Internet Protocol Version 4, Src: 192.168.1.2, Dst: 93.184.216.34
    Transmission Control Protocol, Src Port: 49152, Dst Port: 80, Seq: 0, Ack: 0, Len: 0
    
  4. 大規模なキャプチャを扱う場合、フィルタと詳細出力を組み合わせると、関連するトラフィックに焦点を当てることができます。この例では、HTTP トラフィック(ポート 80)のみを表示し、出力を最初の 20 行に制限します。

    tshark -r tcp_capture.pcap -Y "tcp.port==80" -V | head -n 20
    
  5. ドキュメント化または後の分析のために、詳細出力をテキストファイルに保存することができます。これにより、パケット検査の永続的な記録が作成されます。

    tshark -r tcp_capture.pcap -V > verbose_output.txt
    
  6. HTTP ヘッダーなどの特定のプロトコル要素を調べるには、プロトコルフィルタと詳細モードを組み合わせます。これは、ウェブアプリケーションのデバッグや HTTP トランザクションの分析に役立ちます。

    tshark -r tcp_capture.pcap -Y "http" -V
    

まとめ

この実験では、Wireshark の tshark コマンドラインツールを使用して TCP 会話を分析する方法を学びました。特定のフィルタを使用して TCP トラフィックをキャプチャし、TCP ハンドシェイクの詳細を調べ、分析用のサンプルトラフィックを生成しました。

さらに、エンドポイント間の TCP 会話を一覧表示し、特定のポートトラフィックをフィルタリングする手法を探りました。この実験では、詳細出力と会話統計を使用したパケット検査の実践的な経験を通じて、効果的なネットワーク分析を行うことができました。