はじめに
この実験では、ネットワーク分析に欠かせないツールであるWiresharkを使って、ネットワークトラフィックをフィルタリングする方法を学びます。あらかじめ取得されたパケットファイルを分析し、表示フィルターを適用して特定のトラフィックだけを抽出し、フィルタリングした結果をさらに調査するためにエクスポートします。これらのスキルを身につけると、ネットワークパターンの特定、接続問題のトラブルシューティング、ネットワーク通信の理解に役立ちます。
Tsharkを使い始める
グラフィカルインターフェースを使う前に、Wiresharkのコマンドライン版である tshark を使います。tshark は、すばやい分析やスクリプト作成に適した強力なツールです。このステップでは、インストール状態を確認し、用意されているパケットキャプチャファイルを基本的に調査します。
まず、バージョンを確認して
tsharkが正しくインストールされていることを確かめます。tshark --versionWiresharkと
tsharkのバージョンを示す、次のような出力が表示されます。TShark (Wireshark) x.x.x (Git vx.x.x packaged as x.x.x-1) ...プロジェクトディレクトリには、
capture.pcapというサンプルのパケットキャプチャファイルが配置されています。lsコマンドでファイルの存在を確認します。ls -lh capture.pcap出力には、ファイルサイズやファイル名などの詳細が表示されます。
-rw-rw-r-- 1 labex labex 9.1M Oct 24 2015 capture.pcapキャプチャファイルの概要を確認するには、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最後に、
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 を使って基本的なフィルターを適用します。
表示フィルターは
-Y(大文字のY)フラグで指定します。TCPパケットだけを表示するには、tcpフィルターを使います。まず、ファイル内の最初の5個のTCPパケットを表示します。tshark -r capture.pcap -Y "tcp" -c 5出力には、プロトコルがTCPであるパケットだけが表示されます。
IPアドレスを条件にしてフィルタリングすることもできます。送信元IPアドレスが
192.168.3.131のパケットをすべて確認するには、ip.srcフィルターを使います。tshark -r capture.pcap -Y "ip.src == 192.168.3.131" -c 5完全一致を指定するために
==を使っている点に注目してください。フィルターは、
&&(AND)などの論理演算子で組み合わせられます。送信元IPアドレスが192.168.3.131のTCPパケットを探すには、先ほどの2つのフィルターを組み合わせます。tshark -r capture.pcap -Y "tcp && ip.src == 192.168.3.131"フィルタリングした出力を、後で分析できるように新しいキャプチャファイルへ保存できます。
-wフラグで出力ファイルを指定します。フィルタリングしたTCPパケットをfiltered_tcp.pcapというファイルに保存します。tshark -r capture.pcap -Y "tcp && ip.src == 192.168.3.131" -w filtered_tcp.pcap新しいファイルが作成されたことを確認します。
ls -lh filtered_tcp.pcapディレクトリに、サイズの小さい新しいキャプチャファイルが表示されます。
Wireshark GUIでトラフィックを確認する
tshark は自動化に適していますが、Wiresharkのグラフィカルユーザーインターフェース(GUI)を使うと、パケットを詳しく分析できる、豊富で対話的な環境を利用できます。このステップでは、Wireshark GUIを起動し、主要な構成要素を確認します。
ターミナルからWiresharkアプリケーションを起動します。重要:WiresharkはGUIアプリケーションであり、正常に動作するにはグラフィカル環境が必要です。スタンドアロンのTerminal Interfaceではなく、Desktop Interfaceを使用してください。 行末のアンパサンド
&により、アプリケーションがバックグラウンドで実行され、ターミナルをほかのコマンドに使えるようになります。wireshark &このステップを完了し、ステップチェックを実行するまで、Wiresharkを開いたままにしてください。
注記: デスクトップ環境のないスタンドアロンのターミナルでこのコマンドを実行すると、Wiresharkは起動に失敗します。GUIアプリケーションを使うときは、必ずDesktop Interfaceを使用してください。

Wiresharkのメインウィンドウが表示されます。既存のファイルを分析するため、ネットワークインターフェースを選択する必要はありません。代わりに、
capture.pcapファイルを開きます。- メニューバーで
File->Open...をクリックします。 - ファイルダイアログで
/home/labex/projectに移動し、capture.pcapを選択します。 Openボタンをクリックします。
- メニューバーで
メインウィンドウに、ファイル内のパケットが表示されます。次の3つの主要ペインを確認してください。

- Packet List Pane(上部): キャプチャ内のすべてのパケットの一覧です。パケット番号、時刻、送信元、宛先、プロトコルなどの列と、その他の概要情報が表示されます。
- Packet Details Pane(中央): Packet List Paneで選択したパケットのプロトコル階層を、詳細かつ展開可能な形式で表示します。各階層(Ethernet、IP、TCPなど)を展開すると、フィールドを確認できます。
- Packet Bytes Pane(下部): 選択したパケットの生データを、16進数形式とASCII形式で表示します。
Packet List Paneでさまざまなパケットをクリックし、Packet Details PaneとPacket Bytes Paneの情報がどのように更新されるかを確認します。この対話的な操作は、Wiresharkの強力な機能の1つです。
GUIで表示フィルターを適用する
tshark で学んだ表示フィルター構文は、Wireshark GUIでも同じように使えます。GUIでは結果がすぐに視覚的に反映されるため、複雑なフィルターを作成してテストしやすくなります。
Wiresharkウィンドウ上部にある display filter bar を探します。これは横長のテキスト入力欄で、通常はプレースホルダーとして「Apply a display filter...」と表示されています。
HTTPトラフィックをフィルタリングします。フィルターバーに
httpと入力し、Enterキーを押すか、バーの右側にある矢印のApplyボタンをクリックします。http
Packet List Paneがすぐに更新され、HTTPパケットだけが表示されます。フィルター構文が有効な場合、フィルターバーが緑色になることを確認してください。無効なフィルターを入力すると、赤色になります。
次に、DNSトラフィックをすべて探します。前のフィルターを消去し、フィルターバーに
dnsと入力してEnterキーを押します。dnsキャプチャ内のDomain Name Systemのクエリと応答がすべて表示されます。
tsharkのときと同じように、フィルターを組み合わせられます。送信元または宛先がIPアドレス192.168.3.131であるHTTPトラフィックを探すには、ip.addrフィルターとhttpフィルターを組み合わせます。http && ip.addr == 192.168.3.131
この組み合わせにより、特定の通信を詳しく確認できます。
tcp.port == 80(標準HTTPポートのトラフィック)やudp(UDPトラフィック)など、ほかのフィルターも試してください。すべてのパケットを再び表示するには、フィルターバーのXボタンをクリックしてフィルターを消去します。
フィルタリングしたデータをエクスポートする
関心のあるイベントを抽出するためにトラフィックをフィルタリングした後、レポート作成、共有、またはほかのツールでの追加分析のために、結果をエクスポートすることがよくあります。Wiresharkと tshark には、データをエクスポートする方法が複数あります。
まず、前のステップと同じように、Wireshark GUIで
httpフィルターを適用します。表示中の(フィルタリングされた)パケットだけを新しいキャプチャファイルに保存します。
File->Export Specified Packets...の順に選択します。- ダイアログボックスの「All Packets」で、
Displayedラジオボタンが選択されていることを確認します。 - ファイル名を
http_capture.pcapとし、/home/labex/projectディレクトリに保存します。

パケットの概要をテキストファイルまたはCSVファイルとしてエクスポートすることもできます。ここではCSVとしてエクスポートします。
File->Export Packet Dissections->As CSV...の順に選択します。- 「All Packets」で
Displayedが選択されていることを確認します。 - ファイル名を
http_packets.csvとし、プロジェクトディレクトリに保存します。
同じエクスポート操作は、コマンドラインの
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=,:区切り文字としてカンマを使用します。
エクスポートしたファイルが作成されたことを確認します。
ls -lh http_*ディレクトリに
http_capture.pcap、http_packets.csv、http_export_cli.csvが表示されます。
まとめ
この実験では、Wiresharkと、そのコマンドライン版である tshark を使ってネットワークトラフィックをフィルタリングする基本を学びました。まず、tshark と capinfos でキャプチャファイルを調査しました。次に、tshark と対話的なWireshark GUIの両方で表示フィルターを適用し、特定のプロトコルやIPアドレスに対象を絞り込みました。最後に、フィルタリングした結果を新しいキャプチャファイルや、人が読みやすいCSVファイルとしてエクスポートする方法を学びました。これらの基本スキルは、ネットワーク分析やトラブルシューティングを行ううえでの基礎となります。

