Wireshark(ワイヤーシャーク)はネットワーク上を流れるパケットをキャプチャ・解析する定番ツールです。本記事では、基本的な使い方から、HTTPS通信の解析、特定アプリの通信調査、トラブルシュートまでを実践的にまとめます。
1. Wiresharkの基本的な使い方
インストールと起動
- 公式サイト(wireshark.org)からダウンロードしてインストール
- Windowsではインストール時にNpcap(パケットキャプチャドライバ)も一緒にインストールされます
- 管理者権限で起動する必要がある場合があります
キャプチャの開始
- 起動するとネットワークインターフェース一覧が表示されます(Wi-Fi、イーサネットなど)
- トラフィックの動きを示す折れ線グラフがあるインターフェースを選択
- ダブルクリック、または鮫ヒレアイコンをクリックして開始
- 停止は赤いボタン
よく使う表示フィルタ
以下は代表的なWiresharkの表示フィルタ例です。特定IPを見たいときはipフィールド、HTTPSを見たいときはtcp.port 443、HTTPだけ見たいときは http フィルタ、DNSクエリを見たいときは dns フィルタを使います。SYNパケットを抽出したいときは tcp.flags.syn フィールドを指定します。キャプチャフィルタ(記録前の絞り込み)では BPF 構文を使い、host や port といったキーワードで記録量を減らせます。
便利な機能
- Follow / TCP Stream:1つのTCP接続のやり取りを通しで表示
- Statistics / Conversations:通信ペアごとの統計
- Statistics / I/O Graph:通信量の時系列グラフ
- File / Export Objects / HTTP:HTTPで転送されたファイルを抽出
2. HTTPS解析
HTTPSはTLSで暗号化されているため、通常のキャプチャでは中身が見えません。解析するには「鍵を取り出して復号する」必要があります。
暗号化されたままで分かること
- 接続先のIPアドレス・ポート
- TLSハンドシェイク(ClientHello / ServerHello / Certificate)
- SNI(Server Name Indication):アクセス先のホスト名
- 証明書の内容、TLSバージョン・暗号スイート
復号する方法
方法A:SSLKEYLOGFILEを使う(推奨)
ブラウザやcurlは、環境変数 SSLKEYLOGFILE を設定するとTLSセッションキーをファイルに書き出します。そのファイルをWiresharkにEdit / Preferences / Protocols / TLS の「(Pre)-Master-Secret log filename」に指定すると、キャプチャ済みパケットが自動的に復号されます。Chrome / Firefox / Edge が対応しています。
方法B:サーバのRSA秘密鍵(限定的)
TLS 1.3やDHE/ECDHE鍵交換では復号不可。古いサーバでしか使えません。
方法C:中間者プロキシ(mitmproxy / Burp)
アプリの通信解析にはこれが最有力。Wiresharkはネットワーク全体、mitmproxyはHTTP内容を詳しく見る用途と使い分けます。
3. 特定アプリの通信調査
プロセス名から接続先を特定
Wiresharkはプロセス名でフィルタできないため、OS側のツールで「アプリから接続先IP・ポート」を先に把握します。WindowsではResource Monitor(resmon.exe)のネットワークタブ、もしくはSysinternalsのTCPView(無料)がわかりやすく、プロセスと接続先がリアルタイムで一覧できます。ここで判明したIPアドレスやポートをWiresharkの表示フィルタ(ip.addr や tcp.port)で指定して絞り込みます。
スマホアプリの場合
スマホ自体ではWiresharkが動かないため、PCを経由させてキャプチャします。PCのWi-Fiをモバイルホットスポット化し、スマホをそのSSIDに接続したうえで、PCのWiresharkでホットスポットインターフェースをキャプチャします。HTTPS中身を見たい場合はmitmproxyが定番ですが、証明書ピンニングをしているアプリは中間者プロキシでも復号できません。
注意点
- 自分が所有・利用権限のある端末・アカウントのみを対象に
- アプリの利用規約を確認
4. トラブルシュート
基本ステップ
- 症状を1文で言語化
- 期待される正常な通信を想像(DNS、TCP、TLS、HTTPの順)
- キャプチャしながら問題を再現
- どの段階で止まっているかを特定
「繋がらない」
SYNパケットだけ送られて応答がない場合は、ファイアウォールやルーティングの問題を疑います。RST(リセット)が返っていたら、サーバ側でポートが開いていない可能性が高いです。DNS応答がエラーを返していれば名前解決の問題となります。
「遅い」
TCPの再送、重複ACK、Zero Window、Window Fullといった事象が多発していないかを見ます。Analyze メニューのExpert Informationに関連イベントが一覧化されるので、困ったらまずそこを見ます。
「途中で切れる」
RSTとTLS Alert メッセージの有無を確認します。RSTの発信元で原因を切り分けできます:クライアント発(アプリタイムアウト)、サーバ発(アプリエラー・接続数制限)、中間機器発(ファイアウォールやロードバランサのタイムアウト)。
MTU問題(VPNでよく発生)
小さい通信は通るのに大きい転送だけ止まるときは、経路上のMTU不一致を疑います。DFビット付きの大きめなIPパケットを見て、ICMP Fragmentation Needed が返っていないかを確認します。解決策はVPNインターフェースのMTUを下げる、もしくはTCP MSS Clampingです。
TCPフラグの読み方(最重要)
正常な接続の流れは「SYN、SYN+ACK、ACK」の3wayハンドシェイク、そのあとデータやり取り、最後にFIN+ACKとACKの交換で終了します。この流れのどこで止まったか、どこでRSTが入ったかが切り分けの軸になります。
チェックリスト
- 問題は再現できるか
- クライアント・サーバ両方のIPでフィルタしたか
- Expert Informationを見たか
- TCP 3wayハンドシェイクは完了しているか
- DNS応答は返っているか
- TLSアラートやICMPエラーは出ていないか
- Conversations統計で通信量・再送率を見たか
まとめ
Wiresharkは「とりあえずキャプチャを取ればなんとかなる」道具ではなく、仮説を立てて適切なフィルタで絞り込み、TCP・TLS・HTTPの各層を順に確認していく道具です。まずは自分の通信を観察するところから始めてみてください。
※ 通信解析は必ず自分が管理する端末・通信に対してのみ行ってください。

コメント