はじめに
この実験では、Wireshark のコマンドラインツール tshark を使用して、ネットワークトラフィックから特定のパケットフィールドを抽出する方法を学びます。ソース IP (ip.src) や TCP ポート (tcp.port) などの一般的なフィールドを選択する練習を行い、-T fields とカスタム区切り文字を使用した出力形式の設定を習得します。
演習では、パケットキャプチャ、-e フラグを使用したフィールド抽出、およびデータを CSV 形式でエクスポートする手順を案内します。-E separator=, を使用した区切り文字の設定や出力のリダイレクトなどの手法を用いて、出力を整理し、読みやすさと分析性を向上させる方法を学びます。
-e ip.src -e tcp.port でフィールドを選択する
このステップでは、Wireshark のコマンドラインツール tshark を使用して、ネットワークパケットキャプチャから特定のフィールドを抽出する方法を学びます。ネットワークパケットには様々な情報が含まれていますが、分析に必要なのは特定のフィールドだけのことが多いです。ここでは、2 つの重要なフィールドに焦点を当てます。1 つは、パケットの送信元を示すソース IP アドレス (ip.src)、もう 1 つは、使用されている特定のサービスまたはアプリケーションを識別する TCP ポート番号 (tcp.port) です。
まず、作業対象となるサンプルのネットワークトラフィックが必要です。次のコマンドを実行すると、キャプチャできる単純なウェブトラフィックが生成されます。
curl -s http://example.com > /dev/null
ここで、tshark を使用してこのトラフィックをキャプチャしましょう。以下のコマンドは、10 個のパケットをキャプチャし、sample.pcap という名前のファイルに保存します。.pcap 形式は、ネットワークトラフィックキャプチャを保存するための標準形式です。
tshark -c 10 -w sample.pcap
キャプチャファイルが用意できたら、今度は関心のあるフィールドだけを抽出します。次のコマンドは、キャプチャファイルを読み取り、ソース IP アドレスと TCP ポートのみを出力します。
tshark -r sample.pcap -T fields -e ip.src -e tcp.port
このコマンドの各部分が何をするかを分解してみましょう。
-r sample.pcapは、tsharkにキャプチャしたファイルから読み取るよう指示します。-T fieldsは、出力をフィールド形式(XML や JSON などの他の形式ではなく)で取得することを指定します。-e ip.srcは、ソース IP アドレスフィールドを選択します。-e tcp.portは、TCP ポートフィールドを選択します。
出力はタブ区切りの値として表示され、各行が 1 つのパケットを表し、最初にソース IP、次にポート番号が表示されます。
192.168.1.1 443
192.168.1.2 80
これを扱いやすくするために、出力をファイルに保存することができます。これは、大規模なキャプチャを扱う場合や、データをさらに処理したい場合に特に便利です。
tshark -r sample.pcap -T fields -e ip.src -e tcp.port > temp.txt
cat temp.txt
> 記号は出力をファイルにリダイレクトし、cat はそのファイルの内容を表示します。この方法により、フィルタリングされたデータの永続的な記録が残り、後で参照したり、他のツールで分析したりすることができます。
-T fields で出力をフィールド形式に設定する
このステップでは、tshark の出力をカスタマイズして、必要な特定のパケットフィールドのみを表示する方法を探ります。-T fields オプションを使用すると、デフォルトのパケット表示が、処理と分析が容易な構造化された形式に変換されます。
最初に、フィールドを指定せずに tshark を実行すると、各パケットの包括的なが、時には圧倒的な情報が表示されます。
tshark -r sample.pcap -c 3
このデフォルトの表示には、利用可能なすべてのパケット詳細が含まれています。しかし、集中的な分析を行う場合、必要なのは数個の重要な情報だけのことが多いです。そこで、フィールド抽出が役に立ちます。次のコマンドは、特定のフィールドを選択する方法を示しています。
tshark -r sample.pcap -T fields -e frame.number -e ip.src -e ip.dst -e tcp.port
このコマンドの各部分が何をするかを分解してみましょう。
-T fieldsは、tsharkにデフォルトのパケット要約ではなく、フィールドベースの出力を求めることを指示します。-e frame.numberは、キャプチャファイル内のパケットの位置を抽出します。-e ip.srcは、パケットの送信元(ソース IP)を表示します。-e ip.dstは、パケットの宛先(宛先 IP)を表示します。-e tcp.portは、使用されているネットワークポートを明らかにします。
結果は、次のようなクリーンなタブ区切りの出力になります。
1 192.168.1.1 192.168.1.2 443
2 192.168.1.2 192.168.1.1 80
この形式は、データをさらに処理したり、他のツールにインポートしたりする場合に特に便利です。利用可能なフィールドがわからない場合や、フィールド名を確認する必要がある場合は、完全なリストを検索することができます。
tshark -G fields | grep -E 'ip.src|ip.dst|tcp.port'
このコマンドを使用すると、分析に含めたい IP アドレスと TCP ポートに関連するすべてのフィールドを見つけることができます。
-E separator=, でカンマ区切りを使用する
このステップでは、tshark の出力におけるフィールド区切り文字をタブからコンマに変更する方法を学びます。この変更は、データを Excel などの表計算アプリケーションにインポートしたり、CSV (Comma-Separated Values、コンマ区切り値) 形式を期待するツールで分析したりする場合に特に便利です。
まず、先ほど使用したタブ区切りの出力を生成する基本コマンドを見直しましょう。これにより、何を変更しているのかを理解しやすくなります。
tshark -r sample.pcap -T fields -e frame.number -e ip.src -e ip.dst -e tcp.port -c 3
この出力を CSV 形式に変換するには、-E オプションと separator=, を使用します。これにより、tshark にフィールド間の区切り文字をタブではなくコンマにするよう指示されます。
tshark -r sample.pcap -T fields -e frame.number -e ip.src -e ip.dst -e tcp.port -E separator=, -c 3
このコマンドの各部分が何をするかを分解してみましょう。
-E separator=,は、区切り文字をコンマに変更する重要な追加オプションです。- 他のすべてのオプション (
-r、-T fields、-eフィールド、-c) は以前とまったく同じように機能します。 - オプションの順序は、すべて存在していれば問題ありません。
このコマンドを実行すると、次のようにフォーマットされた出力が表示されます。
1,192.168.1.1,192.168.1.2,443
2,192.168.1.2,192.168.1.1,80
3,192.168.1.3,192.168.1.4,22
区切り文字が実際にコンマに変更されたことを確認するには (特に、タブとスペースを目視で区別できない場合に便利です)、出力を od -c にパイプすることができます。od -c は特殊文字を表示します。
tshark -r sample.pcap -T fields -e frame.number -e ip.src -E separator=, -c 1 | od -c
この確認ステップにより、出力が CSV リーダーによって適切に解釈されることを保証できます。これは、他のツールでの分析用にデータを準備する際に重要です。
> fields.csv でファイルにエクスポートする
このステップでは、抽出したパケットデータを CSV (Comma-Separated Values、コンマ区切り値) ファイルに保存する方法を学びます。CSV は、表形式のデータを平文で保存するシンプルなファイル形式であり、表計算アプリケーションやデータ処理ツールでの分析に最適です。パケットデータをファイルに保存することで、後で共有、分析、または処理できる永続的な記録を作成できます。
これまで学んだことをすべて組み合わせて、複数のパケットフィールドを抽出してファイルに保存する単一のコマンドを作成しましょう。
tshark -r sample.pcap -T fields -e frame.number -e ip.src -e ip.dst -e tcp.port -E separator=, > fields.csv
各部分の機能は次の通りです。
-r sample.pcapはパケットキャプチャファイルを読み込みます。-T fieldsは Tshark にフィールド出力を求めることを指示します。- 各
-eフラグは、抽出するフィールド(パケット番号、ソース IP、宛先 IP、およびポート)を指定します。 -E separator=,はコンマをフィールド区切り文字に設定します。> fields.csvは出力を画面に表示する代わりにファイルにリダイレクトします。
このコマンドを実行した後、ファイルが正しく作成されたかどうかを確認しましょう。
ls -l fields.csv
head fields.csv
ls -l コマンドはファイルの詳細を表示し、head は最初の数行を表示します。出力は次のようになるはずです。
1,192.168.1.1,192.168.1.2,443
2,192.168.1.2,192.168.1.1,80
3,192.168.1.3,192.168.1.4,22
このデータをより理解しやすくするために、列ヘッダーを追加することができます。次のようにして、ヘッダー付きの新しいファイルを作成し、データと結合します。
echo "Packet,Source,Destination,Port" > headers.csv
cat headers.csv fields.csv > final.csv
mv final.csv fields.csv
これにより、上部に説明的なヘッダーが付いた新しいバージョンの CSV ファイルが作成され、表計算アプリケーションでデータを操作するのがはるかに容易になります。
まとめ
この実験では、Wireshark のコマンドラインツール tshark を使用して特定のパケットフィールドを抽出する方法を学びました。演習では、-e フラグを使用してフィールドを選択し、-T fields を使用して出力をフォーマットし、結果を分析用のファイルに保存する方法をカバーしました。
また、frame.number、ip.src、tcp.port などの複数のフィールドを組み合わせて構造化された出力を作成する練習も行いました。これらの技術により、生のパケットデータをネットワークトラブルシューティングに適した整理された形式に効率的に変換することができます。


