2026年8月27日
2026年8月27日
Wireshark のパケットキャプチャコマンド集|tshark・dumpcap・tcpdump の使い分けとフィルタ例
Wireshark には GUI だけでなく、コマンドラインで動くキャプチャ・解析ツールが付属しています。GUI のないサーバーでは tcpdump や dumpcap で取得し、手元の Wireshark や tshark で解析する、という分担にすると作業が安定します。この記事では、取得・絞り込み・集計の場面ごとに使うコマンドと、フィルタの書き方、つまずきやすい点をまとめます。
作業の前に確認しておくこと
パケットキャプチャには、通信相手の IP アドレスや Cookie、暗号化されていない通信なら入力内容まで含まれます。キャプチャしてよいのは、自分が管理している、または管理者から許可を得たネットワークと機器だけです。取得したファイルは個人情報を含むデータとして扱い、共有先と保管期間を決めておきます。
ツールの役割は次のとおりです。
- dumpcap: キャプチャ専用のエンジン。GUI の Wireshark も内部で使っています。長時間の取得に向いています
- tshark: Wireshark のコマンドライン版。取得もできますが、主に保存済みファイルの絞り込みや集計に使います
- tcpdump: 多くの Linux サーバーに入っている、Wireshark とは別のキャプチャツール。保存した pcap は Wireshark で開けます
- capinfos / editcap / mergecap: 保存したファイルの情報表示・分割・結合
Linux で一般ユーザーがキャプチャするには、ディストリビューションによっては wireshark グループへの追加など権限の設定が必要です。Windows では Npcap が、macOS ではキャプチャ用の権限設定が必要になります。インストーラーの案内に従ってください。
インターフェースを確認する
どのインターフェースで取得するかを最初に決めます。サーバーでは外向きの NIC、Docker 環境ではブリッジ側、ローカル通信なら lo を選ぶ、といった判断が必要です。
tshark -D # 番号つきでインターフェース一覧
dumpcap -D
ip -br addr # Linux で IP と NIC の対応を確認
通信が通る経路と違うインターフェースで取ると「何も取れない」ことになります。リバースプロキシの裏側を見たい場合は、プロキシとアプリケーションの間の通信がどこを通るかを先に確認します。
キャプチャを取得する
取得時に使うのはキャプチャフィルタ(BPF 形式)です。-f で指定し、条件に合うパケットだけを保存するため、ファイルサイズを抑えられます。
# 443番ポートの通信を100パケットだけ取得
tshark -i eth0 -f "tcp port 443" -c 100 -w /tmp/https.pcapng
# 特定ホストとの通信を60秒間取得
dumpcap -i eth0 -f "host 192.0.2.10" -a duration:60 -w /tmp/host.pcapng
# 長時間の取得はリングバッファで(ファイルサイズの単位は kB)
dumpcap -i eth0 -f "port 80 or port 443" -b filesize:100000 -b files:10 -w /tmp/web.pcapng
リングバッファは、指定したサイズに達すると次のファイルに切り替え、指定数を超えたら古いものから消していく方式です。「いつ起きるか分からない障害」を待つときに、ディスクを使い切らずに取得を続けられます。
SSH でサーバーに入って取得する場合、自分の SSH 通信もキャプチャ対象に入ります。画面に表示しながら取得すると、その表示がさらに SSH のパケットを生んで膨れ上がります。not port 22 を加えておくと防げます。
tcpdump で取得して手元で開く
Wireshark が入っていないサーバーでは tcpdump を使います。
sudo tcpdump -i eth0 -nn -s 0 -w /tmp/capture.pcap 'tcp port 443 and host 192.0.2.10'
-nn は名前解決をしない指定で、DNS 問い合わせが余計に発生するのを防ぎます。-s 0 はパケット全体を保存する指定です(近年の tcpdump は既定で十分な長さを保存しますが、古い版では先頭だけになるため明示しておくと安全です)。保存したファイルを scp などで手元に持ってきて Wireshark で開きます。
SSH 越しに直接 Wireshark へ流し込むこともできます。
ssh user@server "sudo tcpdump -i eth0 -U -s 0 -w - 'not port 22'" | wireshark -k -i -
この方法はサーバー側で sudo のパスワード入力が求められると止まるため、事前に設定を確認しておきます。
表示フィルタで絞り込む
保存したファイルの絞り込みには表示フィルタを使います。-Y で指定し、キャプチャフィルタとは書式が異なる点に注意してください。キャプチャフィルタは tcp port 443、表示フィルタは tcp.port == 443 です。混同するとエラーになります。
tshark -r web.pcapng -Y 'ip.addr == 192.0.2.10'
tshark -r web.pcapng -Y 'tcp.flags.reset == 1' # RST で切られた通信
tshark -r web.pcapng -Y 'tcp.analysis.retransmission' # 再送
tshark -r web.pcapng -Y 'dns.flags.rcode != 0' # エラー応答の DNS
tshark -r web.pcapng -Y 'http.response.code >= 500' # 暗号化されていない HTTP の 5xx
tshark -r web.pcapng -Y 'tls.handshake.type == 1' # TLS の ClientHello
障害調査でよく使うのは、RST と再送の確認です。RST が多ければ途中の機器やサーバーが接続を切っている、再送が多ければ経路で取りこぼしが起きている、と見当を付けられます。
HTTPS の中身は暗号化されているため、通常はホスト名(SNI)や TLS のバージョン程度しか見えません。接続先のホスト名一覧は次のように出せます。
tshark -r web.pcapng -Y 'tls.handshake.type == 1' \
-T fields -e frame.time -e ip.dst -e tls.handshake.extensions_server_name
フィールド名は Wireshark の版によって変わることがあります。古い資料では ssl. で始まる名前が使われていますが、現行版は tls. です(2026年10月現在)。名前が通らないときは、GUI でパケットのその項目を選ぶとステータスバーに正式なフィールド名が表示されます。
統計を出して全体像をつかむ
1件ずつ見る前に統計を出すと、どこを見るべきかが分かります。
tshark -r web.pcapng -q -z conv,tcp # TCP の会話ごとの量
tshark -r web.pcapng -q -z endpoints,ip # 通信相手ごとの量
tshark -r web.pcapng -q -z io,stat,10 # 10秒ごとのパケット数
tshark -r web.pcapng -q -z expert # 再送や異常の要約
capinfos web.pcapng # 取得期間やパケット数
-z io,stat で特定の時間帯だけ通信が途切れていれば、その時刻をサーバーのログと突き合わせます。
ファイルを分割・結合する
大きすぎるファイルは開くだけで時間がかかります。editcap で分割し、必要な時間帯だけを取り出します。
editcap -c 100000 big.pcapng part.pcapng # 10万パケットごとに分割
editcap -A "2026-10-28 10:00:00" -B "2026-10-28 10:10:00" big.pcapng slice.pcapng # 時間帯で切り出し
mergecap -w merged.pcapng part_*.pcapng # 結合(分割後のファイル名は連番と日時つき)
時刻指定はファイルのタイムスタンプが基準です。サーバーの時計がずれていると、ログと突き合わせたときに数秒から数分の差が出るため、NTP で同期しておきます。
自分のブラウザの HTTPS を復号して見る
自分の端末のブラウザや curl の通信に限り、TLS の鍵情報を書き出して Wireshark で復号できます。環境変数 SSLKEYLOGFILE にファイルパスを設定してから対応するブラウザや curl を起動すると、セッション鍵がそのファイルに記録されます。Wireshark の TLS プロトコル設定で、そのファイルを鍵ログとして指定します(設定画面の表記は版により異なります)。
鍵ログファイルがあれば記録期間中の通信をすべて復号できてしまうため、作業後は削除し、環境変数も外しておきます。
まとめ
- サーバーでは dumpcap や tcpdump で取得し、手元の Wireshark や tshark で解析すると分担が明確になる
- 取得時はキャプチャフィルタ(
tcp port 443)、解析時は表示フィルタ(tcp.port == 443)。書式が違う - 長時間の取得はリングバッファでディスクを守る。SSH の通信は
not port 22で除外する - RST・再送・DNS エラーの表示フィルタと
-zの統計で、見るべき箇所を先に絞る - キャプチャには個人情報が含まれる。許可された範囲で取得し、ファイルと鍵ログの扱いに注意する