UbuntuにWiresharkをインストールしてGUI操作まで確認したあと、「もう少し踏み込んで使いたい」と感じる方は多いと思います。
この記事では CLI 版の tshark でパケットをキャプチャする方法と、
知っておくと便利な表示フィルタの書き方を実際のコマンド出力で解説します。
環境は Ubuntu 24.04 LTS の Docker 公式イメージ(ubuntu:24.04)上で実測しています。
同じ手順を VPS や手元のマシンで試せるよう、コマンドとその実出力を省略せず載せます。
この記事のポイント
apt install tsharkで入る CLI 版 Wireshark のバージョンは Ubuntu 24.04 で 4.2.2(22.04 は 3.6.2)tshark -i lo -a duration:4で ループバックに流れるパケットを 4 秒キャプチャできる- 表示フィルタは
-Y 'icmp.type==8'のように指定し、pcap 保存後でもオフライン適用できる -z io,phsでプロトコル階層統計、-z io,stat,1で 1 秒単位の I/O 統計を出力できる- フィルタ式が無効なら「is neither a field nor a protocol name」エラーが即時に返る
目次
1. tshark のインストール(Ubuntu 22.04 vs 24.04 の違い)
Wireshark の CLI 版が tshark です。Ubuntu の universe リポジトリに収録されています。
インストール後にバージョンを確認したときの実出力が下記です。

Hit:1 http://archive.ubuntu.com/ubuntu noble InRelease
$ sudo apt install tshark
The following additional packages will be installed:
libpcap0.8t64 libwireshark-data libwireshark17t64
libwiretap14t64 libwsutil15t64 wireshark-common
Setting up wireshark-common (4.2.2-1.1build3) …
Setting up tshark (4.2.2-1.1build3) …
$ tshark –version
TShark (Wireshark) 4.2.2 (Git v4.2.2 packaged as 4.2.2-1.1build3).
Ubuntu のバージョンごとに収録バージョンが異なります。実際に docker run ubuntu:22.04 と ubuntu:24.04 の両方で確認した結果が次の表です。

| Ubuntu バージョン | tshark バージョン | LTS サポート期限 | 備考 |
|---|---|---|---|
| 22.04 LTS (Jammy) | 3.6.2-2 | 2027年4月 | Wireshark 3.6.x 系 |
| 24.04 LTS (Noble) | 4.2.2-1.1build3 | 2029年4月 | Wireshark 4.2.x 系・Qt6 移行済み |
22.04 では Wireshark 3.6 系、24.04 では 4.2 系が入ります。フィルタ構文・統計コマンドは両方でほぼ共通ですが、
TLS 1.3 の解析改善など 4.2 系に固有の改良が数多くあります。
新規インストールするなら 24.04 を使っておいたほうが後悔しません。
注意
Ubuntu 24.04 で apt install wireshark を実行すると GUI 版の Wireshark がインストールされます。
CLI 専用で使うなら apt install tshark だけで十分です。tshark は wireshark-common を共有ライブラリとして使います。
2. キャプチャ対象のインターフェースを確認する
キャプチャ前にまず使えるインターフェースを確認します。-D オプションで一覧が出ます。
1. eth0
2. any
3. lo (Loopback)
4. bluetooth-monitor
5. nflog
6. nfqueue
7. dbus-system
8. dbus-session
9. ciscodump (Cisco remote capture)
10. sshdump (SSH remote capture)
11. udpdump (UDP Listener remote capture)
番号またはインターフェース名を -i オプションに渡してキャプチャします。
any を指定すると全インターフェースを同時監視できます。
VPS や実機では eth0、コンテナでは eth0 または any を使うことが多いです。
3. ライブキャプチャを実行する(ループバック ICMP の例)
tshark -i <インターフェース> でキャプチャが始まります。
ここでは lo(ループバック)を対象に、ping が生成する ICMP パケットを取得した実測結果を見てみます。


$ ping -c 8 127.0.0.1 -i 0.25 &
$ tshark -i lo -a duration:4 -T fields \
-e frame.number -e frame.time_relative \
-e ip.src -e ip.dst -e _ws.col.Protocol -e frame.len
1 0.000000000 127.0.0.1 127.0.0.1 ICMP 98
2 0.000007224 127.0.0.1 127.0.0.1 ICMP 98
3 0.256977440 127.0.0.1 127.0.0.1 ICMP 98
4 0.256980125 127.0.0.1 127.0.0.1 ICMP 98
5 0.511978871 127.0.0.1 127.0.0.1 ICMP 98
6 0.511981717 127.0.0.1 127.0.0.1 ICMP 98
…
14 packets captured
フレーム1と2が約7マイクロ秒差のペアになっています。奇数フレームが Echo Request(送信)、偶数フレームが Echo Reply(受信)です。
約 256ms ごとにペアが来るのは、-i 0.25(0.25 秒間隔)を指定したためです。
主要なオプションをまとめます。
| オプション | 意味 | 使用例 |
|---|---|---|
-i eth0 |
キャプチャ対象インターフェース | -i any で全 IF |
-c 100 |
パケット数で自動停止 | 100 パケットで終了 |
-a duration:10 |
秒数で自動停止 | 10 秒で終了 |
-w file.pcap |
pcap ファイルに保存 | 後から解析できる |
-T fields -e ... |
特定フィールドのみ抽出 | TSV 形式で出力 |
4. pcap ファイルに保存してあとから解析する
ライブキャプチャをそのまま端末に流すと確認が難しいです。-w で pcap 保存してから -r で読み直す方法が実運用に向いています。
$ tshark -i lo -a duration:4 -w /tmp/capture.pcap
14 packets captured
# 全パケットを読み直して表示
$ tshark -r /tmp/capture.pcap -T fields \
-e frame.number -e ip.src -e ip.dst \
-e _ws.col.Protocol -e frame.len
1 127.0.0.1 127.0.0.1 ICMP 98
2 127.0.0.1 127.0.0.1 ICMP 98
3 127.0.0.1 127.0.0.1 ICMP 98
4 127.0.0.1 127.0.0.1 ICMP 98
… (全 14 フレーム)
pcap は Wireshark の GUI でも開けますし、Python の scapy や dpkt でスクリプト処理もできます。
まず保存、あとから解析が pcap ワークフローの基本です。
5. 表示フィルタの書き方(-Y オプション)
tshark の表示フィルタは -Y '式' で指定します。
フィールド名はドット区切り(ip.src tcp.port icmp.type など)です。


$ tshark -r /tmp/capture.pcap -Y ‘icmp’
1 127.0.0.1 → 127.0.0.1 ICMP 98 Echo (ping) request
2 127.0.0.1 → 127.0.0.1 ICMP 98 Echo (ping) reply
3 127.0.0.1 → 127.0.0.1 ICMP 98 Echo (ping) request
4 127.0.0.1 → 127.0.0.1 ICMP 98 Echo (ping) reply
# Echo Request だけ(type=8)
$ tshark -r /tmp/capture.pcap -Y ‘icmp.type==8’ -T fields \
-e frame.number -e frame.time_relative -e frame.len
1 0.000000 98
3 0.256977 98
5 0.511978 98
7 0.768977 98
# 特定 IP を含む全パケット
$ tshark -r /tmp/capture.pcap -Y ‘ip.addr==192.168.1.1’
# TCP ポート 80 の通信のみ
$ tshark -r /tmp/capture.pcap -Y ‘tcp.port==80’
フィルタには比較演算子(== != > <)と論理演算子(&& / and、|| / or、! / not)が使えます。
たとえば「ポート 80 以外の TCP」は tcp and not tcp.port==80 と書きます。
6. 統計コマンド(プロトコル階層・I/O タイムライン)
-z オプションで豊富な統計が取れます。実測で使い勝手の良かった2つを紹介します。
①プロトコル階層統計(-z io,phs)
===================================================================
Protocol Hierarchy Statistics
Filter:
eth frames:14 bytes:1372
ip frames:14 bytes:1372
icmp frames:14 bytes:1372
===================================================================
-q(quiet)を付けると個別パケットを表示せず統計だけを出します。
このキャプチャは ICMP しか流れていないため、eth → ip → icmp の 3 層がそれぞれ 14 フレーム・1372 バイトになっています。
実際のサーバーを見ると TCP・UDP・DNS など多層にわたる階層が見えます。
②I/O 時系列統計(-z io,stat)
=============================
| IO Statistics |
| |
| Duration: 1.535983 secs |
| Interval: 1 secs |
|—————————|
| |1 |
| Interval | Frames | Bytes |
|—————————|
| 0 <> 1 | 8 | 784 |
| 1 <> End| 6 | 588 |
=============================
最後の引数が集計間隔(秒)です。io,stat,1 なら 1 秒ごと、io,stat,0.5 なら 0.5 秒ごとに集計します。
突発的なトラフィック増加の検出にも使えます。
7. フィルタ式のデバッグ方法
間違ったフィルタを書いたとき、tshark は即座にエラーメッセージを出します。
これを手がかりに修正するのがデバッグの基本です。
$ tshark -r /tmp/capture.pcap -Y ‘icmp’ -c 0
0 packets captured
# 無効なフィルタ(エラーあり)
$ tshark -r /tmp/capture.pcap -Y ‘invalid.xyz’
tshark: “invalid.xyz” is neither a field nor a protocol name.
invalid.xyz
# フィールド名の確認(ip. で始まるものを検索)
$ tshark -G fields | grep -E “^F\s+ip\.src”
F Source Address ip.src IP ip FT_IPv4
正式なフィールド名は tshark -G fields で全一覧が出ます。数万行あるので grep と組み合わせて使います。
"is neither a field nor a protocol name" が出たらフィールド名のタイポを疑いましょう。
8. 表示フィルタ早見表

| フィルタ式 | 説明 | 用途 |
|---|---|---|
icmp |
すべての ICMP パケット | ping の往復を確認 |
icmp.type==8 |
ICMP Echo Request のみ | 送信パケットだけ見たい |
icmp.type==0 |
ICMP Echo Reply のみ | 応答パケットだけ見たい |
ip.addr==192.168.1.1 |
特定 IP を含む全通信 | 1台だけ追いたい |
ip.src==10.0.0.1 |
送信元 IP が 10.0.0.1 | 特定ホストの送信のみ |
tcp.port==80 |
TCP ポート 80(HTTP) | HTTP 通信の確認 |
tcp.flags.syn==1 |
TCP SYN フラグが立っている | 接続試行の検出 |
dns |
DNS クエリ/応答 | 名前解決の追跡 |
frame.len > 1000 |
フレーム長 1000 バイト超 | 大きなパケットの検出 |
!(arp or icmp) |
ARP と ICMP を除外 | ノイズ除去 |
フィルタは複数条件を and / or でつなげます。
たとえば「送信元 192.168.1.5 からの TCP 通信のみ」は ip.src==192.168.1.5 and tcp です。
9. よくあるエラーと対処
注意
次のエラーはコンテナや VPS で tshark を使い始めたときに頻出します。
| エラーメッセージ | 原因 | 対処 |
|---|---|---|
Permission denied (キャプチャ時) |
NET_ADMIN / NET_RAW 権限が不足 | Docker なら --cap-add=NET_ADMIN --cap-add=NET_RAW を追加 |
"invalid.xyz" is neither a field nor a protocol name |
フィルタ式のタイポ | tshark -G fields | grep 目的のキーワード でフィールド名を確認 |
The capture session could not be initiated on interface |
インターフェース名が間違っている | tshark -D で正しいインターフェース名を確認 |
File "/dev/null" is a special file |
-r /dev/null は使えない |
有効な pcap ファイルパスを指定する |
まとめ
- Ubuntu 24.04 では
apt install tsharkで tshark 4.2.2 が入る(22.04 は 3.6.2) tshark -i lo -a duration:4でループバックの ICMP を実際に 14 フレーム取得できた- キャプチャを
-wで pcap 保存し-rで読み直すのが実運用の基本フロー - 表示フィルタは
-Y 'icmp.type==8'のような形式。フィールド名はtshark -G fieldsで確認 -z io,phsでプロトコル階層統計、-z io,stat,1で 1 秒ごとの I/O 統計が取れる- 無効なフィルタは “is neither a field nor a protocol name” エラーで即検出できる
tshark は GUI 版の Wireshark と同じエンジンで動くので、フィルタ構文はそのまま両方で使えます。
コマンドラインに慣れてきたら GUI との組み合わせも試してみてください。
VPS 上で本番サービスを動かしながらパケット解析をしたい場合は、まず VPS 選びから始める必要があります。



コメント