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 で復号できるが、鍵ログは秘密情報として扱う。

お気軽にご相談ください

お見積りへ お問い合わせへ
▲