ネットワークトラフィックの解析において、Wiresharkは世界で最も広く利用されているツールのひとつです。
しかし、GUI環境が利用できないサーバー上での解析や、大量のパケットデータを自動処理したい場面では、コマンドラインインターフェース(CLI)版である「TShark」が真価を発揮します。
TSharkはWiresharkと同じ解析エンジンを搭載しながら、リソース消費を抑え、スクリプトとの連携を容易にする強力なツールです。
本記事では、ネットワーク管理者やセキュリティエンジニアが習得しておくべきTSharkの基本的な使い方から、効率的なフィルタリング手法までを詳しく解説します。
TSharkの概要とCLIならではのメリット
TSharkは、Wiresharkパッケージに含まれているネットワークプロトコル解析ソフトです。
GUI版のWiresharkが直感的な操作に優れているのに対し、TSharkはコマンドラインから直接パケットをキャプチャし、詳細な分析結果を表示することに特化しています。
TSharkを利用する最大のメリットは、リモートサーバーでの作業に適している点にあります。
SSH経由でログインしたサーバー上で直接トラフィックを監視できるため、トラブルシューティングの迅速化が期待できます。
また、GUIを表示するための計算リソースを必要としないため、低スペックな環境や高負荷なネットワークでも安定して動作します。
さらに、TSharkの出力結果はテキスト形式であるため、grepやawk、sedといった標準的なUNIXコマンドと組み合わせて高度なデータ抽出を行うことが可能です。
自動化スクリプトに組み込むことで、特定の異常検知時に自動でキャプチャを開始するような運用も実現できます。
TSharkのインストールと環境準備
TSharkを利用するためには、まずWiresharkがシステムにインストールされている必要があります。
Linux環境(Ubuntu/Debian系)では、以下のコマンドを使用して簡単にインストールできます。
sudo apt update
sudo apt install tshark
インストール中に「非ルートユーザーにパケットキャプチャを許可するか」という確認画面が表示されることがあります。
セキュリティ上の理由から慎重な判断が必要ですが、一般的には「はい」を選択し、適切なユーザーグループに自身を追加することで、sudoなしでの実行が可能になります。
macOSの場合は、Homebrewを利用してインストールするのが最も効率的です。
brew install wireshark
Windows環境では、Wiresharkのインストーラーを実行する際に「TShark」にチェックを入れることで、コマンドプロンプトやPowerShellから利用できるようになります。
インストールが完了したら、tshark -vを実行して、バージョン情報が表示されることを確認してください。
基本的なパケットキャプチャの手順
TSharkを使い始めるにあたり、まずはどのネットワークインターフェースで通信を拾うかを指定する必要があります。
利用可能なインターフェースの確認
現在システムで認識されているネットワークインターフェースを一覧表示するには、-Dオプションを使用します。
tshark -D
1. eth0
2. wlan0
3. bluetooth0
4. any (Pseudo-device that captures on all interfaces)
5. lo (Loopback)
このリストから、キャプチャ対象とする番号や名称を選択します。
リアルタイムキャプチャの実行
特定のインターフェースを指定してキャプチャを開始するには、-iオプションを使用します。
# インターフェース1番(eth0など)を指定して開始
tshark -i 1
コマンドを実行すると、ターミナル上にパケットのサマリーが次々と表示されます。
デフォルトでは標準出力が止まらないため、停止させるには「Ctrl + C」を入力してください。
もし名前解決による遅延を防ぎたい場合は、-nオプションを付与してIPアドレスやポート番号を数値のまま表示させることを推奨します。
パケットの保存と読み込み
取得したパケットを後で詳細に分析したり、他の担当者に共有したりするために、ファイルへの保存は欠かせません。
キャプチャデータのファイル出力
-wオプションを使用すると、キャプチャしたデータをpcapng形式で保存できます。
tshark -i eth0 -n -w capture_data.pcapng
この時、画面にはパケットの詳細は表示されず、キャプチャしたパケット数のみがカウントされます。
一定時間、あるいは一定のファイルサイズでキャプチャを自動停止したい場合は、-aオプションを併用します。
# 60秒間だけキャプチャして保存
tshark -i eth0 -a duration:60 -w capture_60s.pcapng
保存済みファイルの読み込み
保存されたファイルを読み込んで解析するには、-rオプションを使用します。
tshark -r capture_data.pcapng
これにより、WiresharkのGUIを開くことなく、コマンドライン上で過去の通信履歴を素早く確認できます。
大量のログファイルから特定の通信を探す際、GUIでは動作が重くなることがありますが、TSharkであれば高速に処理を行うことが可能です。
フィルタリング手法:キャプチャフィルタとディスプレイフィルタ
TSharkには、Wiresharkと同様に「キャプチャフィルタ」と「ディスプレイフィルタ」の2種類が存在します。
これらを使い分けることで、必要なデータだけを効率よく抽出できます。
キャプチャフィルタ(BPF形式)
キャプチャフィルタは、パケットを取り込む段階で制限をかけるためのフィルタです。
-fオプションを使用し、BPF(Berkeley Packet Filter)構文で記述します。
取り込むデータ量そのものを減らせるため、高トラフィックな環境でのパフォーマンス維持に有効です。
# TCPのポート80(HTTP)のみをキャプチャ
tshark -i eth0 -f "tcp port 80"
主要なキャプチャフィルタの例を以下の表にまとめます。
| 対象 | フィルタ構文 |
|---|---|
| 特定のホスト | host 192.168.1.1 |
| 特定のネットワーク | net 10.0.0.0/24 |
| 特定のプロトコル | icmp / udp / tcp |
| 複数の条件(AND) | tcp port 443 and host 1.1.1.1 |
ディスプレイフィルタ(Wireshark形式)
ディスプレイフィルタは、取り込んだデータ(または読み込んだファイル)に対して表示条件を指定するフィルタです。
-Yオプションを使用し、Wiresharkで使い慣れた高度な構文を利用できます。
# HTTPのGETリクエストのみを表示
tshark -r capture.pcapng -Y "http.request.method == GET"
-Yオプションは主にファイルの読み込み時やリアルタイム表示の制限に使用されます。
複雑なプロトコル階層の条件を指定できるため、特定のフラグが立っているTCPパケットや、特定のエラーコードを返す通信を特定するのに適しています。
特定のフィールドを抽出する応用テクニック
TSharkの真骨頂は、特定のデータフィールドだけを抜き出して整形する機能にあります。
-T fieldsオプションと-eオプションを組み合わせることで、特定のヘッダー情報だけを抽出できます。
CSV形式でのデータ抽出
例えば、パケットの「時刻」「送信元IP」「宛先IP」「プロトコル」だけをカンマ区切りで出力したい場合は、以下のように記述します。
tshark -r capture.pcapng -T fields -e frame.time_relative -e ip.src -e ip.dst -e _ws.col.Protocol -E separator=,
0.000000,192.168.1.5,8.8.8.8,DNS
0.015243,8.8.8.8,192.168.1.5,DNS
0.042189,192.168.1.5,104.18.2.1,TCP
このように出力されたデータは、そのままExcelで開いたり、ログ解析基盤(ELK Stackなど)に投入したりするための素材として最適です。
JSON形式での出力
プログラムからパケットデータを扱いたい場合は、JSON形式での出力が非常に便利です。
-T jsonオプションを付与するだけで、階層構造を持った構造化データが得られます。
tshark -r capture.pcapng -c 1 -T json
これにより、PythonやJavaScriptなどの言語を用いてパケット解析ツールを自作する際の手間が大幅に削減されます。
統計情報の取得
パケット一つひとつを見るのではなく、通信全体の傾向を把握したい場合には統計機能が役立ちます。
-zオプションを使用することで、プロトコルの分布やエンドポイントごとの通信量を集計できます。
# プロトコルの階層統計を表示
tshark -r capture.pcapng -z io,phs
===================================================================
Protocol Hierarchy Statistics
Filter:
eth frames:100 bytes:12000
ip frames:100 bytes:12000
tcp frames:80 bytes:9600
udp frames:20 bytes:2400
===================================================================
このコマンドを使えば、ネットワーク内に予期しないプロトコルが流れていないか、特定の端末が異常な通信量を発生させていないかを一目で判断できます。
TShark運用の注意点とTips
TSharkを運用する上で、いくつか注意すべきポイントがあります。
まず、ディスプレイフィルタ(-Y)とキャプチャフィルタ(-f)を混同しないことが重要です。
リアルタイムキャプチャ中に -Y を多用すると、TSharkがすべてのパケットをメモリに保持しようとしてリソースを激しく消費することがあります。
長時間のキャプチャを行う際は、まず -f で対象を絞り込んでファイルに書き出し、その後に -r と -Y を使って解析するのが定石です。
また、リングバッファ機能(-bオプション)の活用も検討してください。
これにより、古いキャプチャファイルを自動的に削除しながら一定期間の通信を保存し続けることができ、ディスクフルによるシステム停止を防げます。
# 10MBごとにファイルを切り替え、最大5ファイルまで保持
tshark -i eth0 -b filesize:10240 -b files:5 -w continuous_capture.pcapng
まとめ
TSharkは、Wiresharkの強力な解析機能をコマンドラインで実現する、非常に汎用性の高いツールです。
GUIが使えない環境でのパケットキャプチャや、スクリプトによる自動解析、大量のデータからの特定フィールド抽出など、その活用範囲は多岐にわたります。
基本的なインターフェースの選択から、保存・読み込み、そして高度なフィルタリング手法を習得することで、ネットワークトラブルの解決スピードは飛躍的に向上するでしょう。
まずは -n や -i といった基本オプションから使い始め、徐々に -T fields によるデータ抽出や統計機能に触れてみてください。
日々の運用管理やセキュリティ調査において、TSharkはあなたの強力な武器となるはずです。
