はじめに
この実験では、Tshark のキャプチャフィルタを使用してネットワークパケットを選択的にキャプチャする方法を学びます。Wireshark のフィルタ構文を探索し、tshark -f "tcp" のようなコマンドを使用して特定のインターフェイスで TCP トラフィックをキャプチャする練習を行います。
実践的な演習を通じて、eth1 で TCP パケットをフィルタリングし、パケットの詳細を分析し、結果を tcp.pcap に保存します。この実験では、キャプチャフィルタを適用してターゲットのネットワークトラフィックを効率的に分離して調査する実践的な経験を得ることができます。
マニュアルリファレンスで構文を学ぶ
このステップでは、マニュアルページを参照して Wireshark のキャプチャフィルタの基本構文を学びます。実際のパケットキャプチャを行う前にこれらの基本を理解することは重要です。なぜなら、フィルタを使用することで、自分が関心のあるネットワークトラフィックのみを選択的にキャプチャできるからです。
まず、LabEx の仮想マシン (VM) でターミナルが開いていない場合は開きます。デフォルトの作業ディレクトリは
~/projectです。ここですべてのコマンドを実行します。包括的な Wireshark フィルタのドキュメントにアクセスするには、ターミナルで次のコマンドを実行します。
man wireshark-filter
このマニュアルページには、キャプチャフィルタの構文と機能に関するすべての公式ドキュメントが含まれています。これを効果的なフィルタを作成するためのチートシートと考えてください。
マニュアルをスクロールする際に (移動するには
Enterキーを押します)、キャプチャフィルタの基礎を形成する次の重要なセクションに焦点を当てましょう。- 基本的なフィルタ構文の構造:フィルタ式を適切に書式設定する方法
- 一般的なプロトコルフィルタ:TCP、UDP、HTTP などのプロトコル用の事前定義されたフィルタ
- 比較演算子:フィルタ内で値を比較する方法
- 論理演算子:and、or、not を使用して条件を組み合わせる方法
では、学んだことを実際の例で適用しましょう。次のコマンドを実行して、簡単な TCP フィルタをテストします。
tshark -f "tcp" -c 5
このコマンドは 3 つのことを行います。
-f "tcp"は、TCP パケットのみをキャプチャするフィルタを適用します。-c 5は、キャプチャするパケット数を 5 個に制限します。- 結果はターミナルに直接表示されます。
- ネットワークトラフィックがある場合、次のような出力が表示され、キャプチャされた各 TCP パケットの詳細が示されます。
1 0.000000 192.168.1.1 → 192.168.1.2 TCP 74 443 → 49234 [SYN] Seq=0 Win=64240 Len=0
各行は 1 つのパケットを表し、パケット番号、タイムスタンプ、送信元と宛先の IP アドレス、ポート、および TCP フラグが表示されます。
- 出力の調査が終了したら、
qを押して、マニュアルページ (まだ開いている場合) と実行中の tshark キャプチャを終了します。これにより、コマンドプロンプトに戻り、次のステップに進む準備ができます。
-f "tcp" で TCP トラフィックをフィルタリングする
このステップでは、Wireshark のフィルタ構文を使用して TCP (Transmission Control Protocol) ネットワークトラフィックをキャプチャする練習をします。TCP は、インターネットプロトコルスイートのコアプロトコルの一つであり、アプリケーション間で信頼性があり、順序付けられ、エラーチェックされたデータ配信を提供します。この演習は、以前に学習した基本的なパケットキャプチャのスキルを基にしています。
- まず、キャプチャファイルを保存するデフォルトの作業ディレクトリにいることを確認します。
cd ~/project
- ネットワークインターフェースからライブの TCP トラフィックをキャプチャするには、次のコマンドを実行します。
sudo tshark -i eth1 -f "tcp" -c 10
注:無料の VM には eth1 インターフェースがない場合があります。eth0、eth2 などの他のインターフェースを使用できます。
このコマンドの各部分が何をするかを分解してみましょう。
sudoは、パケットキャプチャに必要な管理者権限を付与します-i eth1は、イーサネットインターフェース (eth1) からキャプチャすることを指定します-f "tcp"は、TCP パケットのみを収集するようにキャプチャフィルタを適用します-c 10は、このデモンストレーションのためにキャプチャを 10 パケットに制限します
- 出力には、次のような形式で重要な情報を含む TCP パケットが表示されます。
1 0.000000 192.168.1.1 → 192.168.1.2 TCP 74 443 → 49234 [SYN] Seq=0 Win=64240 Len=0
2 0.000123 192.168.1.2 → 192.168.1.1 TCP 74 49234 → 443 [SYN, ACK] Seq=0 Ack=1 Win=28960 Len=0
各行は 1 つの TCP パケットを表し、以下を示します。
- パケット番号とタイムスタンプ
- 送信元と宛先の IP アドレス
- 送信元と宛先のポート
- TCP フラグ (SYN、ACK など)
- シーケンス番号とウィンドウサイズ
- すべてのヘッダーフィールドを含む完全な TCP パケット構造を調べるには、詳細表示モード (verbose mode) を使用します。
sudo tshark -i eth1 -f "tcp" -c 5 -V
-V フラグは、シーケンス番号、確認応答番号、フラグ、ウィンドウサイズ、チェックサム、オプションなど、すべてのフィールドを含む完全な TCP ヘッダーを示す詳細な出力を提供します。
- 実行中のキャプチャを途中で中断する必要がある場合は、
Ctrl+Cを押すだけでプロセスを停止できます。これは、長時間実行されるキャプチャを終了したい場合や、分析に必要なパケットを確認し終えた場合に便利です。
eth1 でフィルタリングされたトラフィックをキャプチャする
このステップでは、前のステップで行った TCP フィルタリングを基に、eth1 インターフェイスで特定のフィルタを使用してネットワークトラフィックをキャプチャする方法を学びます。eth1 インターフェイスは通常、メインの有線ネットワーク接続を表しており、実際のパケットキャプチャシナリオをデモンストレーションするために使用します。
- まず、次のコマンドを実行してネットワークインターフェイスを確認します。
ip addr show eth1
このコマンドは、eth1 インターフェイスに関する詳細情報を表示します。eth1 インターフェイスがアップ状態 (state UP) で、割り当てられた IP アドレスがあることを示す出力が表示されるはずです。この確認は、存在しないまたはアクティブでないインターフェイスではトラフィックをキャプチャできないため重要です。
- eth1 で具体的に HTTP トラフィックをキャプチャするには、次のコマンドを使用します。
sudo tshark -i eth1 -f "tcp port 80" -c 15
このコマンドが何をするかを分解してみましょう。
-i eth1は、監視するネットワークインターフェイスを指定します。-f "tcp port 80"は、HTTP トラフィック用のキャプチャフィルタを作成します (ポート 80 は標準の HTTP ポートです)。-c 15は、キャプチャするパケット数を 15 個に制限します。これはデモンストレーションには十分で、大量のデータで圧倒されることはありません。
- 特定の IP 間のトラフィックをキャプチャするには、次のコマンドを試してみましょう。
sudo tshark -i eth1 -f "host 8.8.8.8" -c 10
ここでは、Google の DNS サーバー (8.8.8.8) への、またはそこからのトラフィックをフィルタリングしています。"host" フィルタは、この特定の IP アドレスへの、またはそこからの着信および発信トラフィックの両方に一致します。これは、特定のサーバーとの通信を監視したい場合に便利です。
- より複雑なフィルタリングを行うには、条件を組み合わせます。
sudo tshark -i eth1 -f "tcp port 443 and host 8.8.8.8" -c 5
このコマンドは、フィルタを組み合わせる方法を示しています。これは、8.8.8.8 への、またはそこからの HTTPS トラフィック (ポート 443) をキャプチャします。"and" 演算子を使用すると、複数の条件に同時に一致する正確なフィルタを作成できます。
- 次のような詳細を含むフィルタリングされたパケットを示す出力を観察します。
1 0.000000 192.168.1.100 → 8.8.8.8 TCP 74 49234 → 443 [SYN] Seq=0 Win=64240 Len=0
このサンプル出力は、ローカルマシン (192.168.1.100) から Google のサーバーへの TCP SYN パケット (TCP 接続の最初のパケット) を示しています。数字は、タイミング、ポート、および TCP シーケンス情報を表しており、ネットワークの動作を分析するのに役立ちます。
-w tcp.pcap で結果を保存する
このステップでは、キャプチャしたネットワークトラフィックをファイルに保存して後で分析する方法を学びます。これは、別の時間にネットワークパケットを調べたり、同僚と共有したりする必要がある場合に特に便利です。Wireshark のコマンドラインツールである Tshark の -w オプションを使用してキャプチャを保存します。
- まず、正しい作業ディレクトリにいることを確認しましょう。
~/projectディレクトリは、キャプチャファイルを整理して保存する場所です。
cd ~/project
- 次に、実際の TCP トラフィックをキャプチャします。次のコマンドは、いくつかの重要なことを一度に行います。これは、TCP パケットのみを記録してファイルに保存するネットワークカメラをセットアップするようなものです。
sudo tshark -i eth1 -f "tcp" -w tcp.pcap -c 20
このコマンドの各部分が何を意味するかを分解してみましょう。
-i eth1は、Tshark に eth1 ネットワークインターフェイスを監視するよう指示します。-f "tcp"は、TCP パケットのみを記録するキャプチャフィルタを適用します。-w tcp.pcapは、キャプチャしたパケットをtcp.pcapという名前のファイルに保存します。-c 20は、キャプチャするパケット数を 20 個に制限して、大量のデータを収集しないようにします。
- キャプチャを実行した後、ファイルが正しく作成されたことを確認する必要があります。
lsコマンドに-lhオプションを付けると、人間が読みやすい形式でファイルサイズが表示されます。
ls -lh tcp.pcap
ファイルが存在し、そのサイズ (通常、20 個のパケットで数 KB) が表示されるはずです。
- 次に、キャプチャしたパケットを調べてみましょう。このコマンドは、保存したファイルから最初の 5 個のパケットを読み取ります。
tshark -r tcp.pcap -c 5
-r オプションは、Tshark にライブトラフィックをキャプチャする代わりにファイルから読み取るよう指示し、-c 5 は出力を 5 個のパケットに制限します。
- キャプチャした内容をより詳細に調べるには、詳細モードを使用できます。これにより、すべてのプロトコルの詳細とパケットの内容が表示されますが、出力を管理しやすくするために最初の 20 行に制限します。
tshark -r tcp.pcap -V | head -20
-V は詳細出力を有効にし、head -20 は出力の先頭部分のみを表示して、大量の情報に圧倒されないようにします。
まとめ
この実験では、実践的な演習を通じて、tshark でキャプチャフィルタを適用する方法を学びました。プロトコルフィルタや論理式などのフィルタ構文の基本を探索し、基本的なコマンドを使用して TCP トラフィックをキャプチャする練習を行いました。
さらに、この実験では、ライブインターフェイスの監視、詳細モードによる出力のカスタマイズ、フィルタリングされたキャプチャをファイルに保存するなどの高度なテクニックを学びました。これらのスキルを活用することで、インターフェイスの選択、フィルタリング、出力管理を効率的に組み合わせたワークフローで、ネットワークトラフィックを効率的に分析することができます。


