Wireshark でのトラフィックフィルタリング

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

はじめに

この実験では、ネットワーク分析に不可欠なツールである Wireshark を使用して、ネットワークトラフィックをフィルタリングする方法を学びます。事前にキャプチャされたパケットファイルを分析し、表示フィルタ(Display Filters)を適用して特定のトラフィックを抽出、さらに詳細な調査のためにフィルタリング結果をエクスポートする実習を行います。これらのスキルを習得することで、ネットワークパターンの特定、接続トラブルの解決、およびネットワーク通信の仕組みの理解に役立てることができます。

Tshark の基本操作

グラフィカルインターフェース(GUI)を操作する前に、Wireshark のコマンドライン版である tshark から始めます。これは、迅速な分析やスクリプト作成に非常に強力なツールです。このステップでは、インストール状況を確認し、提供されたパケットキャプチャファイルの基本的な検査を行います。

  1. まず、バージョンを確認して tshark が正しくインストールされていることを確認します。

    tshark --version
    

    次のように、Wireshark と tshark のバージョンを示す出力が表示されます。

    TShark (Wireshark) x.x.x (Git vx.x.x packaged as x.x.x-1)
    ...
    
  2. プロジェクトディレクトリに capture.pcap という名前のサンプルパケットキャプチャファイルが配置されています。ls コマンドを使用して、ファイルが存在することを確認してください。

    ls -lh capture.pcap
    

    出力には、サイズや名前などのファイルの詳細が表示されます。

    -rw-rw-r-- 1 labex labex 9.1M Oct 24  2015 capture.pcap
    
  3. キャプチャファイルの全体的な概要を把握するために、Wireshark に付属している capinfos ユーティリティを使用します。

    capinfos capture.pcap
    

    このコマンドは、パケット数、キャプチャ時間、平均パケットサイズなどのメタデータを提供します。

    File name:           capture.pcap
    File type:           Wireshark/tcpdump/... - pcap
    File encapsulation:  Ethernet
    File timestamp precision:  microseconds (6)
    Packet size limit:   file hdr: 65535 bytes
    Number of packets:   14 k
    File size:           9444 kB
    Data size:           9216 kB
    Capture duration:    298.505344 seconds
    First packet time:   2011-01-26 02:52:22.484409
    Last packet time:    2011-01-26 02:57:20.989753
    Data byte rate:      30 kBps
    Data bit rate:       247 kbps
    Average packet size: 646.28 bytes
    Average packet rate: 47 packets/s
    SHA256:              77d06d3f33f1a95fb9f2610f20ead8ce978449077d6ba22d4945b85bd48f75d1
    RIPEMD160:           68e950b2e438c7be011a46646ddfc8105b65b339
    SHA1:                06e502dca8dbfe8e6a9cabc61f722d94756f6db9
    Strict time order:   True
    Number of interfaces in file: 1
    Interface #0 info:
                         Encapsulation = Ethernet (1 - ether)
                         Capture length = 65535
                         Time precision = microseconds (6)
                         Time ticks per second = 1000000
                         Number of stat entries = 0
                         Number of packets = 14261
    
  4. 最後に、tshark を使用してファイルから最初の 5 つのパケットを読み取ります。-r フラグは入力ファイルを指定し、-c はパケット数を制限します。

    tshark -r capture.pcap -c 5
    

    これにより、最初の 5 つのパケットそれぞれの 1 行サマリーが表示され、トラフィックの内容を素早く確認できます。

        1   0.000000 192.168.3.131 → 72.14.213.138 HTTP 997 GET /complete/search?client=chrome&hl=en-US&q=cr HTTP/1.1
        2   0.029841 72.14.213.138 → 192.168.3.131 HTTP 440 HTTP/1.1 200 OK  (text/javascript)
        3   0.223883 192.168.3.131 → 72.14.213.102 TCP 66 55950 → 80 [SYN] Seq=0 Win=8192 Len=0 MSS=1460 WS=4 SACK_PERM=1
        4   0.229423 192.168.3.131 → 72.14.213.138 TCP 54 57011 → 80 [ACK] Seq=944 Ack=387 Win=16192 Len=0
        5   0.242649 72.14.213.102 → 192.168.3.131 TCP 66 80 → 55950 [SYN, ACK] Seq=0 Ack=1 Win=5720 Len=0 MSS=1430 SACK_PERM=1 WS=64
    

Tshark による基本的なフィルタリング

パケットキャプチャには数千のパケットが含まれることがあり、特定の情報を見つけるのが困難な場合があります。表示フィルタを使用すると、特定の条件に一致するパケットのみに表示を絞り込むことができます。このステップでは、tshark を使用して基本的なフィルタを適用する方法を学びます。

  1. 表示フィルタは -Y(大文字の Y)フラグを使用して適用します。TCP パケットのみを表示するには、フィルタ tcp を使用します。ファイル内の最初の 5 つの TCP パケットを表示してみましょう。

    tshark -r capture.pcap -Y "tcp" -c 5
    

    出力には、プロトコルが TCP であるパケットのみが表示されます。

  2. IP アドレスに基づいてフィルタリングすることもできます。送信元 IP アドレス 192.168.3.131 から送信されたすべてのパケットを表示するには、ip.src フィルタを使用します。

    tshark -r capture.pcap -Y "ip.src == 192.168.3.131" -c 5
    

    完全一致を指定するために == を使用していることに注意してください。

  3. フィルタは && (AND) などの論理演算子を使用して組み合わせることができます。送信元 IP 192.168.3.131 からの TCP パケットを見つけるには、前の 2 つのフィルタを組み合わせます。

    tshark -r capture.pcap -Y "tcp && ip.src == 192.168.3.131"
    
  4. フィルタリングされた出力を、後で分析するために新しいキャプチャファイルに保存できます。-w フラグで出力ファイルを指定します。フィルタリングされた TCP パケットを filtered_tcp.pcap という名前のファイルに保存しましょう。

    tshark -r capture.pcap -Y "tcp && ip.src == 192.168.3.131" -w filtered_tcp.pcap
    
  5. 新しいファイルが作成されたことを確認します。

    ls -lh filtered_tcp.pcap
    

    ディレクトリ内に、新しく作成されたサイズの小さいキャプチャファイルが表示されます。

Wireshark GUI でのトラフィック探索

tshark は自動化には優れていますが、Wireshark のグラフィカルユーザーインターフェース(GUI)は、詳細なパケット分析のための豊富でインタラクティブな環境を提供します。このステップでは、Wireshark GUI を起動し、その主要なコンポーネントを探索します。

  1. ターミナルから Wireshark アプリケーションを起動します。重要:Wireshark はグラフィカル環境を必要とする GUI アプリケーションであるため、スタンドアロンのターミナルインターフェースではなく、必ずデスクトップインターフェース(Desktop Interface)を使用してください。 末尾のアンパサンド & はアプリケーションをバックグラウンドで実行し、ターミナルを他のコマンドに使用できるようにします。

    wireshark &
    

    注意: デスクトップ環境のないスタンドアロンターミナルでこのコマンドを実行しようとすると、Wireshark は起動に失敗します。GUI アプリケーションには常にデスクトップインターフェースを使用してください。

    Wireshark デスクトップインターフェース

  2. Wireshark のメインウィンドウが表示されます。今回は既存のファイルを分析するため、ネットワークインターフェースを選択する必要はありません。代わりに capture.pcap ファイルを開きます。

    • メニューバーの File -> Open... をクリックします。
    • ファイルダイアログで /home/labex/project に移動し、capture.pcap を選択します。
    • Open ボタンをクリックします。
  3. メメインウィンドウにファイル内のパケットが表示されます。3 つの主要なペイン(枠)を確認してください。

    Wireshark メインウィンドウ

    • パケットリストペイン (上部): キャプチャされたすべてのパケットのリストです。パケット番号、時刻、送信元、送信先、プロトコル、およびその他のサマリー情報の列があります。
    • パケット詳細ペイン (中央): リストペインで現在選択されているパケットのプロトコルレイヤーを、展開可能な詳細ビューで表示します。各レイヤー(Ethernet、IP、TCP など)を展開して、そのフィールドを確認できます。
    • パケットバイトペイン (下部): 選択されたパケットの生データを、16 進数および ASCII 形式で表示します。
  4. パケットリストペインでさまざまなパケットをクリックし、パケット詳細ペインとパケットバイトペインの情報がどのように更新されるかを確認してください。このインタラクティブな探索は、Wireshark の最も強力な機能の 1 つです。

GUI での表示フィルタの適用

tshark で学んだ表示フィルタの構文は、Wireshark GUI でも全く同じように機能します。GUI では視覚的なフィードバックが即座に得られるため、複雑なフィルタの構築とテストが容易になります。

  1. Wireshark ウィンドウの上部にある 表示フィルタバー (display filter bar) を探します。これは長いテキスト入力フィールドで、通常はプレースホルダーとして "Apply a display filter..." と表示されています。

  2. HTTP トラフィックをフィルタリングしてみましょう。フィルタバーに http と入力し、Enter キーを押すか、バーの右側にある適用ボタン(矢印アイコン)をクリックします。

    http
    

    Wireshark HTTP フィルタ

    パケットリストペインが即座に更新され、HTTP パケットのみが表示されます。フィルタの構文が正しい場合、フィルタバーが緑色に変わることに注目してください。無効なフィルタを入力すると、赤色に変わります。

  3. 次に、すべての DNS トラフィックを見つけてみましょう。前のフィルタをクリアし、フィルタバーに dns と入力して Enter を押します。

    dns
    

    キャプチャ内のすべてのドメインネームシステム(DNS)のクエリとレスポンスが表示されます。

  4. tshark のときと同様に、フィルタを組み合わせることができます。IP アドレス 192.168.3.131 が関与する(送信元または送信先のいずれか)HTTP トラフィックを見つけるには、ip.addr フィルタと http フィルタを組み合わせます。

    http && ip.addr == 192.168.3.131
    

    Wireshark HTTP フィルタ

    この強力な組み合わせにより、特定の会話に焦点を絞ることができます。tcp.port == 80(標準の HTTP ポートのトラフィック)や udp(UDP トラフィック)など、他のフィルタも試してみてください。フィルタをクリアしてすべてのパケットを再度表示するには、フィルタバーの X ボタンをクリックします。

フィルタリングされたデータのエクスポート

関心のあるイベントを特定するためにトラフィックをフィルタリングした後、レポート作成、共有、または他のツールでの詳細な分析のために結果をエクスポートする必要があることがよくあります。Wireshark と tshark は、データをエクスポートするための複数の方法を提供しています。

  1. まず、Wireshark GUI で、前のステップで行ったように http フィルタを適用します。

  2. 表示されている(フィルタリングされた)パケットのみを新しいキャプチャファイルに保存するには:

    • File -> Export Specified Packets... に移動します。
    • ダイアログボックスで、"All Packets" の下の Displayed ラジオボタンが選択されていることを確認します。
    • ファイル名を http_capture.pcap とし、/home/labex/project ディレクトリに保存します。

    Wireshark 指定パケットのエクスポート

  3. パケットのサマリーをテキストまたは CSV ファイルとしてエクスポートすることもできます。CSV としてエクスポートするには:

    • File -> Export Packet Dissections -> As CSV... に移動します。
    • "All Packets" で Displayed が選択されていることを確認します。
    • ファイル名を http_packets.csv とし、プロジェクトディレクトリに保存します。
  4. コマンドラインの tshark を使用して、同じエクスポート操作を実行できます。これは自動化に便利です。次のコマンドは、元の capture.pcap を読み取り、http でフィルタリングし、特定のフィールドを CSV ファイルにエクスポートします。

    tshark -r capture.pcap -Y "http" -T fields -e frame.number -e ip.src -e ip.dst -e http.request.method -e http.host -E header=y -E separator=, > http_export_cli.csv
    
    • -T fields: 出力形式を指定します。
    • -e ...: エクスポートするフィールド(列)を指定します。
    • -E header=y: ヘッダー行を追加します。
    • -E separator=,: セパレータとしてカンマを使用します。
  5. エクスポートされたファイルが作成されていることを確認します。

    ls -lh http_*
    

    ディレクトリ内に http_capture.pcaphttp_packets.csv、および http_export_cli.csv というファイルが表示されるはずです。

まとめ

この実験では、Wireshark とそのコマンドライン版である tshark を使用してネットワークトラフィックをフィルタリングする基本を学びました。まず tsharkcapinfos を使用してキャプチャファイルを検査することから始めました。次に、特定のプロトコルや IP アドレスを抽出するために、最初は tshark で、次にインタラクティブな Wireshark GUI 内で表示フィルタを適用する練習を行いました。最後に、フィルタリングされた結果を新しいキャプチャファイルや、レポートや分析に適した人間が読める CSV ファイルにエクスポートする方法を習得しました。これらのコアスキルは、あらゆるネットワーク分析やトラブルシューティング業務の基礎となります。