Tshark で HTTP トラフィックをフィルタリングする

WiresharkWiresharkBeginner
今すぐ練習

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

はじめに

この実験では、Wireshark のコマンドラインツールである Tshark を使用して、HTTP トラフィックのフィルタリングと分析を学習します。ポート 80 でのウェブトラフィックのキャプチャと、特定のフィルタリング手法を用いた HTTP リクエストの抽出を練習します。

演習では、HTTP メソッド (GET/POST) の抽出と、構造化分析のための JSON 形式での出力のフォーマット設定を行います。これらのスキルは、ネットワークのトラブルシューティングやトラフィックの検査タスクに不可欠です。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL wireshark(("Wireshark")) -.-> wireshark/WiresharkGroup(["Wireshark"]) wireshark/WiresharkGroup -.-> wireshark/packet_capture("Packet Capture") wireshark/WiresharkGroup -.-> wireshark/display_filters("Display Filters") wireshark/WiresharkGroup -.-> wireshark/packet_analysis("Packet Analysis") wireshark/WiresharkGroup -.-> wireshark/commandline_usage("Command Line Usage") subgraph Lab Skills wireshark/packet_capture -.-> lab-548928{{"Tshark で HTTP トラフィックをフィルタリングする"}} wireshark/display_filters -.-> lab-548928{{"Tshark で HTTP トラフィックをフィルタリングする"}} wireshark/packet_analysis -.-> lab-548928{{"Tshark で HTTP トラフィックをフィルタリングする"}} wireshark/commandline_usage -.-> lab-548928{{"Tshark で HTTP トラフィックをフィルタリングする"}} end

-f "tcp port 80" を使って HTTP トラフィックをキャプチャする

このステップでは、Wireshark の表示フィルタ -f "tcp port 80" を使用して HTTP トラフィックをキャプチャする方法を学びます。HTTP (Hypertext Transfer Protocol) は、万維網 (World Wide Web) のデータ通信の基礎であり、通常、暗号化されていないウェブトラフィックにはポート 80 が使用されます。このフィルタを使用すると、他のネットワークプロトコルから HTTP トラフィックを分離できるため、ウェブ通信の分析が容易になります。

始める前に、いくつかの基本事項を理解しましょう。

  • ネットワークポートは、特定の種類のネットワークトラフィックが出入りする「ドア」のようなものです。
  • ポート 80 は、HTTP トラフィックに割り当てられた標準ポートです。
  • Wireshark は、これらのポート番号に基づいてトラフィックをフィルタリングできます。

まず、LabEx VM 環境で Wireshark を開きましょう。以下の手順に注意深く従ってください。

  1. Xfce デスクトップでターミナルを開きます(アプリケーションメニュー > システム > ターミナル から見つけることができます)。
  2. キャプチャファイルを保存するデフォルトの作業ディレクトリに移動します。
cd ~/project
  1. HTTP トラフィックの表示フィルタを指定して Wireshark を起動します。
sudo wireshark -k -f "tcp port 80"

このコマンドのオプションを分解してみましょう。

  • -k: これは Wireshark にパケットのキャプチャを直ちに開始するよう指示します。
  • -f "tcp port 80": これはキャプチャフィルタで、Wireshark にポート 80 を宛先または送信元とする TCP トラフィックのみを記録するよう指示します。

ここで、分析するための HTTP トラフィックが必要です。別のターミナルウィンドウを開き(デスクトップを右クリックして「ターミナルを開く」を選択できます)、以下のコマンドでテストトラフィックを生成します。

curl http://example.com

Wireshark ウィンドウでは、キャプチャされたパケットが表示されます。

  1. あなたのコンピュータから example.com への HTTP リクエスト(通常は "GET / HTTP/1.1" で始まります)
  2. ウェブサーバーからのレスポンス(通常は "HTTP/1.1 200 OK" を含みます)

各パケットには、以下のような重要な詳細が表示されます。

  • 送信元と宛先の IP アドレス
  • プロトコル (HTTP)
  • パケットサイズ
  • タイミング情報

初心者の方へ:Wireshark はネットワークトラフィックの顕微鏡のようなものです。フィルタ tcp port 80 は、他の種類のネットワーク通信を無視して、ウェブトラフィックのみを表示する特殊なレンズのように機能します。このような焦点を絞った表示により、他のネットワークアクティビティに圧倒されることなく、ウェブブラウザとサーバーがどのように通信するかを理解することができます。

-Y "http.request" でリクエストをフィルタリングする

このステップでは、Wireshark の表示フィルタ -Y "http.request" を使用して HTTP リクエストをフィルタリングする方法を学びます。このフィルタを使用すると、レスポンスやその他のネットワークトラフィックを除外して、HTTP リクエストパケットに特化して分析することができます。HTTP リクエストを理解することは、ウェブトラフィック分析の基礎であり、クライアントがサーバーに送信する最初のメッセージを表します。

前のステップで HTTP トラフィックをキャプチャしたことを前提に、今度は HTTP リクエストのみをフィルタリングしましょう。

  1. まず、キャプチャファイルを操作するデフォルトの作業ディレクトリにいることを確認します。
cd ~/project
  1. HTTP リクエストの表示フィルタを指定して Wireshark を起動します。
sudo wireshark -k -Y "http.request"

-Y オプションは表示フィルタを適用します(ステップ 1 で使用したキャプチャフィルタ -f とは異なります)。キャプチャフィルタは記録する内容を制限するのに対し、表示フィルタはすでにキャプチャされたデータの分析に役立ちます。この特定のフィルタは、HTTP リクエストを含むパケットのみを表示します。

  1. 分析するためのテストトラフィックを生成するには、別のターミナルを開き、以下の一般的な HTTP クライアントコマンドを実行します。
curl http://example.com
wget http://example.com

初心者の方へ:表示フィルタ http.request は、HTTP リクエストパケットに特異的にマッチします。これは、サーバーのレスポンスを無視して、クライアントからサーバーに送信されるリクエストのみを分析したい場合に便利です。このフィルタ構文は、Wireshark の強力な表示フィルタ言語の一部であり、プロトコル固有の基準に基づいて表示するパケットを正確に選択することができます。

Wireshark ウィンドウには、これで curlwget コマンドからの HTTP リクエストパケットのみが表示されるはずです。各パケットには、以下を含む重要な HTTP プロトコル情報が表示されます。

  • リクエストの種類を示す HTTP メソッド (GET、POST など)
  • アクセスされる特定のリソースを示す要求された URI
  • プロトコルのバージョンを示す HTTP バージョン (HTTP/1.1 など)
  • ターゲットサーバーを識別するホスト情報

-e http.request.method で HTTP メソッドを抽出する

このステップでは、Wireshark のコマンドラインツールである tshark を使用して、ネットワークトラフィックから HTTP リクエストメソッドを抽出することに焦点を当てます。HTTP メソッドは、リソースに対して実行するアクションを示す動詞で、たとえばデータを取得するための GET やデータを送信するための POST などがあります。

始める前に、取り扱う内容を理解しましょう。

  • HTTP メソッドはウェブ通信の基本的な要素です。
  • Tshark を使用すると、キャプチャされたネットワークパケットから直接これらのメソッドを調べることができます。
  • -e フラグを使用すると、パケットデータから特定のフィールドを抽出することができます。

手順を一歩一歩見ていきましょう。

  1. まず、キャプチャファイルが保存されている正しい作業ディレクトリに移動する必要があります。
cd ~/project
  1. 次に、tshark コマンドを実行して、リアルタイムトラフィックから HTTP メソッドを抽出します。
sudo tshark -Y "http.request" -T fields -e http.request.method

このコマンドを分解してみましょう。

  • sudo: ネットワークトラフィックをキャプチャするために必要な権限を付与します。
  • tshark: Wireshark のコマンドラインバージョンです。
  • -Y "http.request": 表示フィルタを適用して、HTTP リクエストのみを表示します。
  • -T fields: フィールドベースの出力(完全なパケットではなく)を指定します。
  • -e http.request.method: tshark に HTTP メソッドフィールドのみを抽出するよう指示します。
  1. これを実際に確認するために、別のターミナルウィンドウからいくつかのテストトラフィックを生成します。
curl -X GET http://example.com
curl -X POST http://example.com
curl -X DELETE http://example.com

これらの curl コマンドはそれぞれ、異なる HTTP メソッドを example.com に送信し、tshark がこれをキャプチャして表示します。curl-X フラグを使用すると、使用する HTTP メソッドを指定することができます。

これらのコマンドを実行した後、以下のような出力が表示されるはずです。

GET
POST
DELETE

この出力は、キャプチャされたトラフィックで使用された HTTP メソッドを正確に示しており、ウェブリクエストのパターンを簡単に分析することができます。メソッド名は、tshark によってキャプチャされた順序で表示されます。

-T json で JSON 形式で表示する

このステップでは、Wireshark の Tshark ユーティリティを使用して、キャプチャした HTTP トラフィックデータを JSON 形式に整形する方法を探ります。JSON (JavaScript Object Notation) は、人間にも読みやすく、機械にも解析しやすい軽量のデータ形式です。このため、プログラムによるネットワークトラフィックの分析に最適です。

始める前に、JSON 出力が有用な理由を理解しましょう。

  • データを構造化して整理できる
  • 他のツールやスクリプトとの統合が容易
  • データ交換のための標準化された形式
  1. まず、コマンドを実行するデフォルトの作業ディレクトリにいることを確認します。
cd ~/project
  1. 次に、Tshark を実行して HTTP リクエストをキャプチャし、JSON 形式で出力します。このコマンドはフィルタリングと JSON 整形を組み合わせています。
sudo tshark -Y "http.request" -T json -e http.request.method -e http.host -e http.request.uri

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

  • -Y "http.request": このフィルタは Tshark に HTTP リクエストパケットのみを表示するよう指示します。
  • -T json: 出力を JSON 形式にすることを指定します。
  • -e フィールド:これらは各 HTTP リクエストから特定の情報を抽出します。
    • http.request.method: 使用された HTTP メソッド (GET、POST など)
    • http.host: アクセスされているウェブサイトのドメイン
    • http.request.uri: 要求されている特定のパスまたはリソース
  1. キャプチャするテストトラフィックを生成するには、2 番目のターミナルウィンドウを開き、以下の curl コマンドを実行します。
curl http://example.com
curl http://example.org/sample

このテストトラフィックが生成されている間に Tshark コマンドを実行すると、次のように構造化された出力が表示されます。

[
  {
    "_index": "packets-1",
    "_source": {
      "layers": {
        "http.request.method": ["GET"],
        "http.host": ["example.com"],
        "http.request.uri": ["/"]
      }
    }
  },
  {
    "_index": "packets-2",
    "_source": {
      "layers": {
        "http.request.method": ["GET"],
        "http.host": ["example.org"],
        "http.request.uri": ["/sample"]
      }
    }
  }
]

各 HTTP リクエストが明確にラベル付けされたフィールドを持つ個別の JSON オブジェクトになっていることに注目してください。この構造により、以下のことを簡単に識別できます。

  • どのウェブサイトにアクセスされたか
  • どのタイプのリクエストが行われたか
  • どの特定のページまたはリソースが要求されたか

JSON 形式は、このデータを後で分析するために保存したり、JSON データを自動的に処理できる他のツールに渡したりする場合に特に便利です。

まとめ

この実験では、Wireshark の Tshark コマンドラインツールを使用して HTTP トラフィックをフィルタリングし、分析する方法を学びました。演習では、-f "tcp port 80" を使用して HTTP トラフィックをキャプチャし、curl を使用してテストトラフィックを生成し、実際に分析する方法をカバーしました。

また、-Y "http.request" を使用して HTTP リクエストをフィルタリングし、-e http.request.method を使用して HTTP メソッドなどの特定のデータを抽出する練習も行いました。この実験では、-T json を使用して JSON 形式で出力を整形する方法を示し、効率的なネットワークトラフィック検査のための重要な技術を身につけました。