2026年10月7日
2026年10月7日
Wiresharkでネットワーク通信を解析する方法|表示フィルタ・ストリーム追跡・TLSの確認
Wireshark は、キャプチャしたパケットをプロトコルごとに分解して表示し、フィルタや統計で問題の箇所を探せる GUI の解析ツールです。サイトの表示が遅い、API が時々失敗する、TLS の接続でエラーになるといった問題を、通信の中身とタイミングから確かめられます。この記事では、手元の PC での取得と、サーバーで取得したファイルの読み込み、表示フィルタの書き方、TCP ストリームの追跡、再送やリセットの見つけ方、ブラウザの TLS 通信を復号して読む方法までを説明します。サーバー上での取得そのもの(tcpdump のフィルタや保存方法)は tcpdump の記事で扱っているので、ここでは「取った通信をどう読むか」に重点を置きます。
使う前の注意
キャプチャには Cookie、ログイン時の入力、メールアドレスなどが含まれることがあります。取得するのは自分が管理する、または許可を得たネットワークと機器に限り、保存したファイル(pcap / pcapng)は調査後に削除してください。サポート窓口などに渡す場合は、中身を確認してから必要な部分だけを書き出します。後述する TLS の鍵ログファイルは、通信を復号できる秘密情報として扱います。
インストールとキャプチャ権限
Wireshark は Windows・macOS・Linux 向けに提供されています(2026年10月現在は 4 系が最新系統です)。公式サイトか OS のパッケージから入手してください。
- Windows: インストーラーで Npcap も一緒に入れます。Npcap が無いとライブキャプチャができず、ファイルの閲覧だけになります。
- macOS: インストール時にキャプチャ権限を付与する補助コンポーネントを入れるかを聞かれます。入れないと管理者権限なしでキャプチャできません。
- Linux: ディストリビューションのパッケージを使います。一般ユーザーでキャプチャするには、パッケージの設定で非 root のキャプチャを許可し、ユーザーを
wiresharkグループに加えてから再ログインします。Wireshark 自体を root で起動するのは避けてください。
画面のメニュー名は日本語表示と英語表示で異なり、バージョンによっても変わることがあります。この記事では日本語表示を基本に、英語表記を併記します。
キャプチャフィルタと表示フィルタの違い
Wireshark には2種類のフィルタがあり、文法が違います。初めて使う人が最も混乱する点です。
- キャプチャフィルタ: 取得時に絞り込みます。tcpdump と同じ BPF の文法(例:
host 203.0.113.10 and port 443)です。取らなかったパケットは後から見られません。 - 表示フィルタ: 取得済みのパケットから表示するものを絞ります。Wireshark 独自の文法(例:
ip.addr == 203.0.113.10 && tcp.port == 443)で、何度でも書き直せます。
迷ったら、キャプチャフィルタは広めにして、表示フィルタで絞るのが安全です。表示フィルタの入力欄は、文法が正しいと緑、誤りがあると赤になります。
よく使う表示フィルタ
ip.addr == 203.0.113.10 送信元か宛先がこのIP
tcp.port == 443 TCPの443番
http.request HTTPリクエストだけ(平文のHTTP)
http.response.code >= 500 5xxのレスポンス
dns.flags.rcode != 0 エラーになったDNS応答
tcp.flags.reset == 1 RSTを含むパケット
tcp.analysis.retransmission 再送されたパケット
tcp.analysis.flags Wiresharkが問題ありと判定したTCPパケット全般
tls.handshake.type == 1 TLSのClientHello
tls.handshake.extensions_server_name == "example.com" 接続先ホスト名(SNI)で絞る
パケット詳細のペインで項目を右クリックすると、その値で表示フィルタを作るメニューがあります。フィールド名を覚えていなくても、この方法で正しい書き方を確認できます。
サーバーで取ったファイルを読む
Web サーバー側の問題は、サーバーで tcpdump を使ってファイルに保存し、手元の Wireshark で開くのが一般的です。
# サーバー側
sudo tcpdump -i eth0 -nn -w /var/tmp/web.pcap -c 5000 'host 198.51.100.5 and port 443'
sudo chown "$USER" /var/tmp/web.pcap
# 手元のPC側
scp user@server.example.com:/var/tmp/web.pcap .
ダウンロードしたら「ファイル」から開くか、ウィンドウにドラッグします。コピー後はサーバー上のファイルも削除しておきます。
macOS や Linux からは、SSH 経由で tcpdump の出力を直接 Wireshark に流し込む方法もあります。
ssh user@server.example.com "sudo tcpdump -i eth0 -U -w - 'not port 22'" | wireshark -k -i -
ただしこの方法は、sudo がパスワードを求める環境ではそのままでは動きません。慣れないうちは、ファイルに保存してコピーする手順のほうがつまずきにくいです。
通信を読むための基本操作
TCP ストリームを追跡する
パケット一覧で対象の通信を右クリックし、「追跡(Follow)」から「TCP ストリーム」を選ぶと、1本の接続でやり取りされたデータが会話の形で表示されます。平文の HTTP や SMTP なら、リクエストとレスポンスの中身をそのまま読めます。同時に表示フィルタが tcp.stream eq 番号 に切り替わり、その接続だけが一覧に残ります。
時間の差を見る
「表示(View)」の時刻表示形式を「直前に表示されたパケットからの秒数」に切り替えると、どこで待ちが発生しているかが分かりやすくなります。たとえば、リクエストを送ってからレスポンスの最初のデータが来るまで数秒空いていれば、ネットワークではなくサーバー側の処理(PHP やデータベース)が遅いと判断できます。平文の HTTP では、http.time を列に追加すると、リクエストから応答までの時間を一覧で比べられます。
統計とエキスパート情報
- 統計 → 対話(Conversations): どの IP やポートの組み合わせで、どれだけ通信したかの一覧です。通信量の多い相手を探すのに使います。
- 統計 → プロトコル階層(Protocol Hierarchy): キャプチャ全体の内訳です。想定外のプロトコルが混ざっていないかを確認できます。
- 統計 → I/O グラフ: 時系列の通信量です。遅くなった時刻に再送が増えていないかを重ねて見られます。
- 分析 → エキスパート情報(Expert Information): 再送、順序の入れ替わり、ウィンドウの枯渇など、Wireshark が検出した注意点を重要度別に一覧します。まずここを開くと、調べる場所の当たりがつけやすくなります。
症状別の見どころ
- ページが時々遅い:
tcp.analysis.retransmissionで再送が多ければ、回線や経路の品質を疑います。再送が無く、サーバーの応答だけが遅ければアプリケーション側の問題です。 - 接続がすぐ切れる:
tcp.flags.reset == 1で RST を探し、どちら側から送られているかを見ます。サーバー側から返っていれば、待ち受けの設定やファイアウォール、プロキシのタイムアウトを確認します。 - 名前解決が遅い・失敗する:
dnsで絞り、問い合わせから応答までの時間と、dns.flags.rcode != 0のエラー応答を確認します。 - TLS の接続エラー: ClientHello(
tls.handshake.type == 1)の SNI と提示しているバージョン、サーバーからの応答を見ます。サーバーが Alert を返して切断している場合は、パケット詳細の Alert の内容(証明書の問題、対応プロトコルの不一致など)が手がかりになります。
ブラウザの TLS 通信を復号する
HTTPS の中身は暗号化されているため、通常は HTTP のヘッダーや本文を読めません。自分のブラウザの通信に限っては、ブラウザに鍵の情報をファイルへ書き出させ、Wireshark に読み込ませることで復号できます。
Firefox や Chrome 系のブラウザは、環境変数 SSLKEYLOGFILE が設定されているとセッション鍵をそのファイルに書き出します(対応状況はブラウザのバージョンや配布形態で変わる可能性があります)。
# macOS / Linux の例: この端末から起動したブラウザだけが鍵を書き出す
export SSLKEYLOGFILE="$HOME/tls-keys.log"
firefox &
Wireshark の「設定(Preferences)」で「Protocols」→「TLS」を開き、鍵ログファイル((Pre)-Master-Secret log filename)にこのファイルを指定すると、HTTP/2 なども含めて中身が表示されます。調査が終わったら環境変数を外してブラウザを再起動し、鍵ログファイルを削除してください。このファイルがあれば、記録した通信を誰でも復号できてしまいます。
ブラウザは HTTP/3(QUIC、UDP の 443 番)を使うことがあります。TCP の表示フィルタで通信が見つからない場合は、quic で絞って確認します。
まとめ
- キャプチャフィルタ(BPF)と表示フィルタ(Wireshark 独自)は文法が違う。取得は広めに、表示で絞る。
- サーバーの通信は tcpdump で保存して手元で開き、調査後はどちらのファイルも削除する。
- TCP ストリームの追跡、時刻表示の切り替え、エキスパート情報で問題の場所を絞り込む。
- 再送・RST・DNS エラー・TLS の Alert など、症状ごとに見るフィルタを決めておく。
- 自分のブラウザの TLS は
SSLKEYLOGFILEで復号できるが、鍵ログは秘密情報として扱う。