Tshark のパフォーマンスをプロファイルする

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

はじめに

この実験では、タイミング測定とパケット処理技術を使用して、Wireshark のコマンドラインツール tshark のパフォーマンスをプロファイリングし、分析する方法を学びます。--print-timers を使用して詳細なタイミング統計を有効にし、キャプチャファイルを処理し、JSON 出力を解釈してさまざまな処理フェーズを理解することを探索します。

実践的な演習を通じて、処理時間の測定、特定のトラフィックタイプのフィルタリング、およびパフォーマンスメトリクスの分析を練習します。この実験では、Wireshark のパフォーマンスをプロファイリングしながら、パケットをカウントし、DHCP トラフィックを調べるための tshark コマンドを実際に使用する経験を提供します。

--print-timers でタイマーを有効にする

このステップでは、--print-timers オプションを使用して、Wireshark のパケット処理のパフォーマンスを測定する方法を探索します。これは、Tshark がネットワークトラフィックを分析する際に大部分の時間をどこに費やしているかを理解したい場合に特に有用です。

始める前に、正しい作業ディレクトリにいることを確認しましょう。これにより、すべてのコマンドが期待されるファイルパスで正常に動作することが保証されます。

cd ~/project

--print-timers オプションは、Tshark にパケットを処理する際のさまざまなタスクに費やした時間を追跡して報告するよう指示します。Wireshark に付属しているサンプルの DHCP トラフィックキャプチャで試してみましょう。

tshark --print-timers -r /usr/share/wireshark/example_captures/dhcp.pcap

このコマンドを実行すると、次のような出力が表示されます。

Timer 1: 0.000000 seconds
Timer 2: 0.000123 seconds
...

これらのタイマーは、パケット処理のさまざまな段階を表しています。特定の 1 つのタイマーのみに焦点を当てるには、grep を使用して出力をフィルタリングすることができます。たとえば、Timer 1 の結果のみを表示するには、次のようにします。

tshark --print-timers -r /usr/share/wireshark/example_captures/dhcp.pcap | grep "Timer 1"

各主要なタイマーが通常測定する内容は次のとおりです。

  • Timer 1: ディスクからキャプチャファイルを読み取るのに費やされた時間
  • Timer 2: パケットを処理およびデコードするのに費やされた時間
  • Timer 3: 表示フィルターを適用するのに費やされた時間(使用されている場合)

これらのタイマーを理解することで、大きなキャプチャファイルや複雑なフィルタリングシナリオで作業する際のパフォーマンスのボトルネックを特定するのに役立ちます。

-r capture.pcap でファイルを処理する

このステップでは、Wireshark のコマンドラインツール tshark-r オプションを使用して、パケットキャプチャファイルを処理する方法を学びます。これは、キャプチャされたネットワークパケットを含むバイナリファイルである .pcap ファイルに保存された事前に記録されたネットワークトラフィックを分析するために不可欠です。

  1. まず、正しい作業ディレクトリにいることを確認します。一部のコマンドはファイルが特定の場所にあることを期待する場合があるため、これは重要です。

    cd ~/project
    
  2. Wireshark のインストールに付属しているサンプルの DHCP キャプチャファイルを調べてみましょう。DHCP (Dynamic Host Configuration Protocol) は、デバイスに IP アドレスを自動的に割り当てるために使用されるネットワークプロトコルです。-r フラグは、tshark に指定されたファイルから読み取るよう指示します。

    tshark -r /usr/share/wireshark/example_captures/dhcp.pcap
    
  3. 出力は、各パケットの基本情報を列で表示します。

    • パケット番号
    • タイムスタンプ(キャプチャ開始からの秒数)
    • 送信元 → 宛先の IP アドレス
    • プロトコル(この場合は DHCP)
    • パケット長
    • プロトコル固有の情報
    1 0.000000 192.168.0.1 → 192.168.0.10 DHCP 342 DHCP Discover - Transaction ID 0x7c3e0c29
    2 0.023512 192.168.0.10 → 192.168.0.1 DHCP 342 DHCP Offer - Transaction ID 0x7c3e0c29
    ...
    
  4. キャプチャファイル内のパケットの総数を数えるには、tshark の出力を wc -l にパイプ (|) します。wc -l は行を数えるコマンドで、各パケットは 1 行に表示されます。

    tshark -r /usr/share/wireshark/example_captures/dhcp.pcap | wc -l
    
  5. より詳細な分析のために、-V(詳細表示)フラグを使用して、利用可能なすべてのパケット詳細を表示することができます。これにより大量の出力が生成されるため、head -20 を使用して最初の 20 行のみを表示します。

    tshark -r /usr/share/wireshark/example_captures/dhcp.pcap -V | head -20
    

-Y "tcp" で TCP をフィルタリングする

このステップでは、Wireshark の表示フィルタオプション -Y を使用して、TCP トラフィックをフィルタリングする方法を学びます。TCP (Transmission Control Protocol) は、ネットワーク通信の核心プロトコルの 1 つで、信頼性の高いデータ配信を担当します。-Y フィルタを使用すると、他のネットワークトラフィックから TCP パケットを分離することができ、ウェブブラウジング、ファイル転送、またはその他の TCP ベースのアプリケーションを分析する際に不可欠です。

  1. まず、正しい作業ディレクトリにいることを確認します。一部のコマンドは相対ファイルパスに依存する場合があるため、これは重要です。

    cd ~/project
    
  2. 次に、サンプルのキャプチャファイルに基本的な TCP フィルタを適用してみましょう。-r フラグは入力ファイルを指定し、-Y "tcp" は tshark に TCP パケットのみを表示するよう指示します。

    tshark -r /usr/share/wireshark/example_captures/http.pcap -Y "tcp"
    
  3. 出力には TCP パケットのみが表示され、TCP ハンドシェイク(SYN、SYN - ACK)とその後のデータ転送が示されます。各行は、シーケンス番号、ウィンドウサイズ、およびフラグを持つ TCP パケットを表します。

    1 0.000000 192.168.1.100 → 192.168.1.1 TCP 74 49278 → 80 [SYN] Seq=0 Win=64240 Len=0
    2 0.000042 192.168.1.1 → 192.168.1.100 TCP 74 80 → 49278 [SYN, ACK] Seq=0 Ack=1 Win=65535 Len=0
    ...
    
  4. キャプチャ内に含まれる TCP パケットの数を数えたい場合は、出力を wc -l にパイプすることができます。これは、迅速な統計を取得するのに便利です。

    tshark -r /usr/share/wireshark/example_captures/http.pcap -Y "tcp" | wc -l
    
  5. よりターゲット化された分析のために、特定のポートの TCP トラフィックをフィルタリングすることができます。この例では、ポート 80(HTTP)のトラフィックのみを表示します。ポート番号を指定するために tcp ではなく tcp.port を使用していることに注意してください。

    tshark -r /usr/share/wireshark/example_captures/http.pcap -Y "tcp.port == 80"
    

JSON タイミング出力を分析する

このステップでは、Wireshark が JSON 形式でタイミング情報を記録する方法を調べます。JSON (JavaScript Object Notation) は、人間にも読みやすく、機械にも解析しやすい軽量データ形式です。前のステップで学んだパケットキャプチャとフィルタリングのスキルを組み合わせて、意味のあるタイミング統計を生成します。

始める前に、正しいディレクトリにいることを確認しましょう。プロジェクトフォルダには必要なすべてのファイルが含まれており、作業を整理することができます。

cd ~/project

次に、TCP パケットに特化したタイミングデータを生成します。--print-timers フラグは Tshark に出力にタイミング情報を含めるよう指示し、-T json はそれを JSON 形式で出力します。これを後で分析するためにファイルに保存します。

tshark -r /usr/share/wireshark/example_captures/http.pcap -Y "tcp" --print-timers -T json > tcp_timings.json

JSON 出力の構造を簡単に見てみましょう。head コマンドを使って最初の 20 行を表示することで、データをさらに処理する前にデータの構成を理解することができます。

head -20 tcp_timings.json

JSON データを効果的に扱うために、強力なコマンドライン JSON プロセッサである jq を使用します。まだインストールされていない場合は、このコマンドでインストールできます。

sudo apt-get install -y jq

これで、特定のタイミングメトリクスを抽出することができます。このコマンドは JSON をフィルタリングして、各パケットのタイマー情報のみを表示し、タイミングデータをより明確に表示します。

jq '.[].timers' tcp_timings.json | head -10

最後に、パケット番号とそれに対応する処理時間のみを表示する、より焦点を絞った要約を作成しましょう。これにより、各パケットの処理にかかった時間を明確に把握することができます。

jq '.[].timers | {packet_number: .packet_num, processing_time: .processing_time}' tcp_timings.json | head -5

まとめ

この実験では、--print-timers オプションを使用して Tshark のパフォーマンスをプロファイリングし、ファイル読み取りやパケット処理などの処理フェーズを分析する方法を学びました。演習では、ネットワーク分析ワークフローを最適化するために、タイミング統計をどのように解釈するかを示しました。

また、-r でキャプチャファイルを処理する、パケット内容を調べる、詳細モードを利用するなど、基本的なパケット分析技術を練習しました。この実験では、Wireshark のサンプルファイルを使った実践的な経験を通じて、ネットワークトラフィック分析の基礎スキルを身につけました。