はじめに
この実験では、Wireshark のコマンドラインツール tshark を使用して、特定のネットワークパケットをフィルタリングしてエクスポートする方法を学びます。サンプルのキャプチャファイル (capture.pcap) から UDP パケットを抽出し、新しいファイル (udp.pcap) に保存する練習を行います。
この演習では、-r でキャプチャファイルを開く、-Y でフィルタを適用する、-w で結果をエクスポートするなど、tshark の主要な操作をカバーしています。また、-V フラグを使用した詳細な分析により、エクスポートされたパケットを検証します。
-r capture.pcap でファイルを開く
このステップでは、Wireshark のコマンドラインツール tshark を使用してパケットキャプチャファイルを開く方法を学びます。これは、事前に記録されたキャプチャファイルからネットワークトラフィックを分析する最初のステップです。tshark は Wireshark のターミナルバージョンで、グラフィカルインターフェイスを使用せずにネットワークパケットを分析できます。
tshark の -r オプションを使用すると、以前に保存したキャプチャファイルからパケットを読み取ることができます。ここで使用するファイル (capture.pcap) には、分析用のサンプルネットワークトラフィックデータが含まれています。PCAP ファイルには、後で調べることができる生のネットワークパケットデータが保存されています。
以下の手順に注意深く従ってください。
- まず、キャプチャファイルがある正しいディレクトリにいることを確認します。これは、
tsharkがファイルを見つける必要があるため重要です。
cd ~/project
- キャプチャファイルが存在することを確認し、そのサイズを確認します。これにより、正しいファイルを操作していることが確認できます。
ls -l capture.pcap
ファイルのパーミッション、サイズ、変更時刻が表示される、次のような出力が表示されるはずです。
-rw-r--r-- 1 labex labex 123456 Jul 1 10:00 capture.pcap
- 次に、
tsharkを使用してキャプチャファイルを開きます。この基本的なコマンドは、ファイルを読み取り、各パケットの概要を表示します。
tshark -r capture.pcap
これにより、ターミナルにパケットの概要が表示されます。各行は、重要な情報を含む 1 つのネットワークパケットを表します。
1 0.000000 192.168.1.1 → 192.168.1.2 TCP 74 443 → 54321 [SYN] Seq=0 Win=64240 Len=0
2 0.000123 192.168.1.2 → 192.168.1.1 TCP 74 54321 → 443 [SYN, ACK] Seq=0 Ack=1 Win=65535 Len=0
- パケットに関するより詳細な情報(イーサネット、IP、TCP ヘッダーなどのすべてのプロトコルレイヤーを含む)を表示するには、詳細出力用の
-Vフラグを追加できます。
tshark -r capture.pcap -V
これにより、パケットの完全な詳細が表示され、パケットヘッダーの特定のフィールドを調べる必要がある場合に便利です。
-Y "udp" で UDP をフィルタリングする
このステップでは、Wireshark の表示フィルタ構文を使用し、tshark の -Y オプションを使ってネットワークキャプチャから UDP パケットをフィルタリングする方法を学びます。UDP (User Datagram Protocol) は、接続を確立せずにデータグラムを送信する簡単な方法を提供するコアネットワーキングプロトコルです。このフィルタリングは、複数のプロトコルを含む可能性のある大きなキャプチャファイルから UDP トラフィックのみに焦点を当てる必要がある場合に特に有用です。
tshark の -Y オプションは、Wireshark の表示フィルタフィールドと同様に機能します。特定の条件に一致するパケットのみを表示するフィルタリング基準を指定できます。ここでは、UDP プロトコルを使用するパケットを具体的にフィルタリングします。
以下の手順に注意深く従ってください。
- まず、キャプチャファイルがあるプロジェクトディレクトリにいることを確認します。これは、
tsharkがキャプチャファイルにアクセスするために正しいパスが必要なため重要です。
cd ~/project
- 次に、UDP フィルタを適用して、キャプチャファイル内の UDP パケットのみを分析します。基本的なコマンド構文は
tshark -r [file] -Y [filter]です。
tshark -r capture.pcap -Y "udp"
このコマンドは capture.pcap ファイルを処理し、UDP パケットのみを表示します。出力は次のような形式でフィルタリングされたパケットを表示します。
5 0.002345 192.168.1.1 → 192.168.1.2 UDP 82 5353 → 5353 Len=40
8 0.004567 192.168.1.2 → 192.168.1.1 UDP 82 5353 → 5353 Len=40
各行は UDP パケットを表し、キャプチャ内の番号、タイムスタンプ、送信元と宛先の IP アドレス、ポート、およびパケットの長さを示します。
- 各 UDP パケットに関するより詳細な情報を取得するには、
-V(詳細表示)フラグを追加できます。これにより、各パケットの完全なプロトコルの内訳が表示されます。
tshark -r capture.pcap -Y "udp" -V
この詳細出力には、イーサネット、IP、および UDP ヘッダーとそれぞれのフィールドと値を含むパケットのすべてのレイヤーが表示されます。
- キャプチャ内に存在する UDP パケットの数を知りたいだけで(その内容を見る必要がない場合)、出力をワードカウントコマンドにパイプすることができます。
tshark -r capture.pcap -Y "udp" | wc -l
これにより、キャプチャファイル内で見つかった UDP パケットの総数を表す単一の数字が出力されます。
-w udp.pcap でパケットをエクスポートする
このステップでは、Wireshark の -w オプションを使用して、フィルタリングされた UDP パケットを新しいキャプチャファイルにエクスポートする方法を学びます。これは、特定のネットワークトラフィックを分離して集中的に分析したい場合や、同僚と共有したい場合に特に有用です。
-w オプションは、Tshark にパケットを pcap 形式のファイルに書き込むよう指示します。pcap 形式はパケットキャプチャファイルの標準形式です。先ほど使用した -Y フィルタと組み合わせることで、元のキャプチャファイルから UDP パケットのみを選択的に保存することができます。
手順を段階的に説明します。
- まず、キャプチャファイルがあるプロジェクトディレクトリにいることを確認します。
cd ~/project
- 次に、すべての UDP パケットを
udp.pcapという新しいファイルにエクスポートしましょう。
tshark -r capture.pcap -Y "udp" -w udp.pcap
このコマンドは 3 つの重要なことを行います。
-r capture.pcapは読み取る入力ファイルを指定します。-Y "udp"は UDP パケットのみを選択するフィルタを適用します。-w udp.pcapは Tshark にフィルタリングされたパケットを保存する場所を指示します。
- コマンドを実行した後、新しいファイルが作成されたことを確認しましょう。
ls -l udp.pcap
ファイルが存在し、そのサイズが表示される、次のような出力が表示されるはずです。
-rw-r--r-- 1 labex labex 12345 Jul 1 10:05 udp.pcap
- 実際に新しいファイルにエクスポートされた UDP パケットの数を確認するには、次のコマンドを実行します。
tshark -r udp.pcap | wc -l
このコマンドは、新しいファイル内のすべてのパケットをカウントします。この数は、元のキャプチャ内の UDP パケットの数と一致するはずです。
- 最後に、非 UDP パケットがないことを確認することで、UDP パケットのみがエクスポートされたことを確認しましょう。
tshark -r udp.pcap -Y "not udp" | wc -l
これは 0 を返すはずです。これは、フィルタが正しく機能し、udp.pcap には UDP パケットのみが保存されたことを意味します。
-r udp.pcap -V で確認する
この最後の検証ステップでは、Wireshark の詳細出力モードを使用して、エクスポートされた UDP パケットファイル (udp.pcap) の内容を調べます。-V フラグは「verbose」(詳細)を意味し、各パケットの包括的なプロトコル情報を表示します。これにより、先ほどのフィルタリングとエクスポート操作が正しく機能したことを確認できます。
パケットキャプチャを扱う際、検証は非常に重要です。なぜなら、意図した通りにデータを抽出できたことを保証するからです。いくつかの検証方法を見ていきましょう。
- まず、パケットキャプチャファイルが保存されているプロジェクトディレクトリに移動します。
cd ~/project
- 最初の数個の UDP パケットを詳細なプロトコル情報とともに表示します。
head -20コマンドは、読みやすさのために出力を最初の 20 行に制限します。
tshark -r udp.pcap -V | head -20
出力は次のようなパケットの詳細を示し、ここで UDP プロトコル情報を検証できます。
Frame 1: 82 bytes on wire (656 bits), 82 bytes captured (656 bits)
Ethernet II, Src: 00:11:22:33:44:55, Dst: 66:77:88:99:aa:bb
Internet Protocol Version 4, Src: 192.168.1.1, Dst: 192.168.1.2
User Datagram Protocol, Src Port: 5353, Dst Port: 5353
- ファイル内のすべてのパケットが UDP パケットであることを確認するために、プロトコルフィールドを調べます。このコマンドは、一意のプロトコルタイプを抽出してカウントします。
tshark -r udp.pcap -T fields -e frame.protocols | sort | uniq -c
適切にフィルタリングされたキャプチャでは、UDP に関連するプロトコルのみが表示されるはずです。
- 完全な検証のために、誤って含まれている可能性のある非 UDP パケットを確認しましょう。このコマンドは非 UDP トラフィックをフィルタリングし、空の結果を返すはずです。
tshark -r udp.pcap -Y "not udp" -V
- 最後に、エクスポートされたファイル内の UDP パケットの総数をカウントして、数量が期待通りであることを検証します。
tshark -r udp.pcap | wc -l
これにより、キャプチャファイル内のパケットの総数がわかります。フィルタリング処理後は、すべてのパケットが UDP パケットであるはずです。
まとめ
この実験では、Wireshark のコマンドラインツール tshark を使用して、ネットワークパケットを分析、フィルタリング、およびエクスポートする方法を学びました。演習では、-r を使用してキャプチャファイルを開き、-V を使用して詳細なパケット情報を表示し、-Y を使用して UDP などの特定のトラフィックを分離する表示フィルタを適用する方法をカバーしました。
また、-w を使用してフィルタリングされたパケットを新しいファイルにエクスポートし、出力を再読み取りすることで結果を検証する練習を行いました。これらの技術は、コマンドライン環境での効率的なネットワークトラフィック分析と選択的なデータ抽出に必要なスキルを提供します。


