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

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

はじめに

この実験では、ネットワーク分析に欠かせないツールであるWiresharkを使って、ネットワークトラフィックをフィルタリングする方法を学びます。あらかじめ取得されたパケットファイルを分析し、表示フィルターを適用して特定のトラフィックだけを抽出し、フィルタリングした結果をさらに調査するためにエクスポートします。これらのスキルを身につけると、ネットワークパターンの特定、接続問題のトラブルシューティング、ネットワーク通信の理解に役立ちます。

Tsharkを使い始める

グラフィカルインターフェースを使う前に、Wiresharkのコマンドライン版である tshark を使います。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アプリケーションであり、正常に動作するにはグラフィカル環境が必要です。スタンドアロンのTerminal Interfaceではなく、Desktop Interfaceを使用してください。 行末のアンパサンド & により、アプリケーションがバックグラウンドで実行され、ターミナルをほかのコマンドに使えるようになります。

    wireshark &
    

    このステップを完了し、ステップチェックを実行するまで、Wiresharkを開いたままにしてください。

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

    Wireshark Desktop Interface

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

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

    Wireshark Main Window

    • Packet List Pane(上部): キャプチャ内のすべてのパケットの一覧です。パケット番号、時刻、送信元、宛先、プロトコルなどの列と、その他の概要情報が表示されます。
    • Packet Details Pane(中央): Packet List Paneで選択したパケットのプロトコル階層を、詳細かつ展開可能な形式で表示します。各階層(Ethernet、IP、TCPなど)を展開すると、フィールドを確認できます。
    • Packet Bytes Pane(下部): 選択したパケットの生データを、16進数形式とASCII形式で表示します。
  4. Packet List Paneでさまざまなパケットをクリックし、Packet Details PaneとPacket Bytes Paneの情報がどのように更新されるかを確認します。この対話的な操作は、Wiresharkの強力な機能の1つです。

GUIで表示フィルターを適用する

tshark で学んだ表示フィルター構文は、Wireshark GUIでも同じように使えます。GUIでは結果がすぐに視覚的に反映されるため、複雑なフィルターを作成してテストしやすくなります。

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

  2. HTTPトラフィックをフィルタリングします。フィルターバーに http と入力し、Enter キーを押すか、バーの右側にある矢印の Apply ボタンをクリックします。

    http
    

    Wireshark HTTP Filter

    Packet List Paneがすぐに更新され、HTTPパケットだけが表示されます。フィルター構文が有効な場合、フィルターバーが緑色になることを確認してください。無効なフィルターを入力すると、赤色になります。

  3. 次に、DNSトラフィックをすべて探します。前のフィルターを消去し、フィルターバーに dns と入力して Enter キーを押します。

    dns
    

    キャプチャ内のDomain Name Systemのクエリと応答がすべて表示されます。

  4. tshark のときと同じように、フィルターを組み合わせられます。送信元または宛先がIPアドレス 192.168.3.131 であるHTTPトラフィックを探すには、ip.addr フィルターと http フィルターを組み合わせます。

    http && ip.addr == 192.168.3.131
    

    Wireshark HTTP Filter

    この組み合わせにより、特定の通信を詳しく確認できます。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 Export Specified Packets

  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.pcap、http_packets.csv、http_export_cli.csv が表示されます。

まとめ

この実験では、Wiresharkと、そのコマンドライン版である tshark を使ってネットワークトラフィックをフィルタリングする基本を学びました。まず、tshark と capinfos でキャプチャファイルを調査しました。次に、tshark と対話的なWireshark GUIの両方で表示フィルターを適用し、特定のプロトコルやIPアドレスに対象を絞り込みました。最後に、フィルタリングした結果を新しいキャプチャファイルや、人が読みやすいCSVファイルとしてエクスポートする方法を学びました。これらの基本スキルは、ネットワーク分析やトラブルシューティングを行ううえでの基礎となります。