Wireshark は、リアルタイムでのパケットキャプチャと検査に使用される、オープンソースの主要なネットワークトラフィックアナライザーです。このツールは2000以上のネットワークプロトコルをサポートし、すべての主要プラットフォームで動作します。Wireshark User Guide (2026)によると、このユーティリティはモバイルおよびWeb開発におけるネットワーク診断、APIデバッグ、セキュリティ分析に使用されています。
要点
Wireshark は、コンピューターのネットワークインターフェースを通過するデータパケットをキャプチャするオープンソースプログラム(GPLv2)です。OSIモデルのデータリンク層でのキャプチャには、libpcap(Unix)またはNpcap(Windows)ライブラリに基づいています。
通常モードでは、ネットワークカードは自分のMACアドレス宛てのフレームのみを受信します。Wiresharkはインターフェースをpromiscuous(無差別)モードに切り替え、システムは宛先に関係なく通過するすべてのフレームを処理します。キャプチャされたデータはraw socketを通じてカーネルに渡され、その後libpcapライブラリが分析のためにユーザースペースへコピーします。
Wiresharkはモジュラーアーキテクチャを採用しています。各プロトコルは独立したディセクター(バイナリデータを解析して構造化された形で表示するプラグイン)として実装されています。2026年時点で、プログラムにはHTTP/2、QUIC、gRPC、MQTTを含む2,874のプロトコル用のディセクターが実装されています。ディセクターはプロトコルツリーシステムを通じて動作し、各パケットはEthernetフレームからアプリケーション層まで層ごとに解析されます。
// カスタムプロトコル用のシンプルなディセクターの例
static int dissect_custom(tvbuff_t *tvb, packet_info *pinfo,
proto_tree *tree, void *data) {
proto_item *ti = proto_tree_add_item(tree, hf_custom_field,
tvb, 0, tvb_captured_length(tvb), ENC_NA);
return 0;
}
Wiresharkのグラフィカルインターフェースは、パケットリスト(packet list)、プロトコル詳細(packet details)、ヘックスダンプ(packet bytes)の3つのパネルに分かれています。各パネルはリアルタイムで更新され、インタラクティブなナビゲーションをサポートします。パケットの行をクリックすると完全な構造が開きます。
このツールはpcap、pcapng、snoop、NetMon形式のキャプチャファイルを読み取ります。JSON、XML、CSV、プレーンテキストへのエクスポートが可能です。主要なアプリケーション層プロトコルには、HTTP/HTTPS、DNS、DHCP、TCP、UDP、TLS、QUIC、WebSocket、MQTT、AMQP、Protobufがあります。モバイル開発では、ストリーム多重化を備えたgRPCとHTTP/2のサポートが特に重要です。
内蔵ユーティリティには、Follow Stream(完全なTCP/UDP/TLSダイアログの再構築)、IO Graph(スループットグラフ)、会話統計(Conversations)、プロトコル階層(Protocol Hierarchy)があります。Flow Graph機能はノード間のパケットシーケンスを可視化し、クライアントとサーバーのやり取りをデバッグする際の遅延原因の特定を容易にします。
キャプチャの開始は、ネットワークインターフェース(Ethernet、Wi-Fi、Bluetooth PAN、Loopback)の選択から始まります。Windowsでは、WinPcap API Compatible ModeでNpcapをインストールする必要がある場合があります。モバイルデバイスでのキャプチャには、SSHトンネル経由のRemote Packet Captureが使用されます。
Androidデバイスでは、tcpdumpまたはPCAPdroidを使用してトラフィックをキャプチャし、その後ファイルを作業用コンピューターに転送します。ADBによるリモートキャプチャのコマンド:
# ADB shell経由でAndroidのトラフィックをキャプチャ
adb shell tcpdump -i wlan0 -s 0 -w /sdcard/capture.pcap
# コンピューターにコピー
adb pull /sdcard/capture.pcap .
Windowsでは、localhost(127.0.0.1)のトラフィックは物理インターフェースを通過しないため、Wiresharkは直接それを認識できません。解決策は、Loopback Supportオプションを有効にしてNpcapをインストールするか、RawCapを使用してトラフィックをリダイレクトすることです。LinuxとmacOSでは、loopbackインターフェース(lo)は追加設定なしでキャプチャされます。
Wiresharkは、capture filters(キャプチャ前にlibpcapレベルで適用)とdisplay filters(すでにキャプチャされたデータに適用)の2種類のフィルターを提供します。Capture filtersはBPF(Berkeley Packet Filter)構文を使用し、display filtersはオートコンプリート付きのWireshark独自の言語を使用します。
BPFフィルターはtcpdump形式で記述され、カーネル内で実行されるため、高負荷時のパケット損失を最小限に抑えます。フィルターの例:
| フィルター | 目的 |
|---|---|
| tcp port 80 | 標準ポートのHTTPトラフィックのみ |
| host 192.168.1.1 | 特定のホストからのパケット |
| not arp | ARPリクエスト以外のすべてのパケット |
Display filtersは事後的に適用され、論理演算子and、or、notを使用した複雑な条件をサポートします。例:http.request.method == "POST" and ip.src == 192.168.0.100は、特定のIPからのPOSTリクエストのみをフィルタリングします。フィルターは再利用のためにお気に入りとして保存できます。
HTTPトラフィックは、リクエストメソッド、URI、ヘッダー、レスポンスボディといった読みやすい形式でWiresharkに表示されます。Follow TCP Stream機能は、クライアントとサーバーの完全なダイアログを1つのウィンドウにまとめます。HTTPSの場合は、コンテンツが暗号化されているため、TLSセッションの復号が必要です。
ChromeとFirefoxブラウザーはSSLKEYLOGFILE環境変数をサポートしており、TLSセッションキーをテキストファイルに書き込みます。Wiresharkはこのファイルを使用してレコードを復号します。設定はPreferences → Protocols → TLS → (Pre)-Master-Secret log filenameで行います。
# TLSキーログ付きでChromeを起動
export SSLKEYLOGFILE=/tmp/sslkeys.log
google-chrome .
# キャプチャ後にWiresharkでパスを指定
# Edit → Preferences → Protocols → TLS → Log Filename
gRPCはトランスポートとしてHTTP/2を使用し、データのシリアライズにProtobufを使用します。Wiresharkは、構造定義を含む.protoファイルを提供すれば、gRPCメッセージを復号します。Protobufディセクターはバイナリフィールドをprotoファイルの名前に対応付けます。これはマイクロサービスアーキテクチャのデバッグで重要です。
Wiresharkによるモバイルデバッグでは、デバイスのトラフィックをコンピューターにプロキシする必要があります。最も信頼できる方法は、ノートパソコンにWi-Fiアクセスポイントを作成し、NAT経由でトラフィックをリダイレクトすることです。Androidでは、root権限なしでPCAPdroidアプリを使用するVPN方式も利用できます。
PCAPdroidはローカルVPNサービスを作成し、アプリのトラフィックをUDPストリーム経由でWiresharkにリダイレクトします。このアプリはrootアクセスを必要とせず、個々のプロセスごとのフィルタリングをサポートします。取得したpcapファイルは、完全な分析のためにWiresharkで開かれます。
# PCAPdroidからコンピューターでトラフィックを受信
# PCAPdroid → Settings → PCAP dumper → UDP Exporter
nc -l -u 192.168.0.10 12345 > capture.pcap
Wiresharkは汎用ツールですが、特定のタスクにはより専門化されたソリューションがあります。tcpdumpはグラフィックなしのサーバーキャプチャに効果的で、Charles ProxyはHTTPSトラフィックの分析に便利で、Fiddlerはリクエストをその場で変更できるWebトラフィック検査に適しています。
Charles Proxyは、独自のSSL証明書によってHTTPSをインターセプトできる中間プロキシサーバーとして機能します。Wiresharkとは異なり、CharlesはSSLKEYLOGFILEの設定を必要とせず、トラフィックを表示するだけでなく、レスポンスの置換、遅延のエミュレーション、リクエストの再送などの変更も可能です。
Fiddlerは.NETエコシステムで人気のあるもう1つのプロキシツールです。組み込みのリクエストエディター、モック用のAutoResponderサポート、カスタムリクエスト作成用のコンポーザーを提供します。FiddlerはブラウザのWebトラフィック分析に適しており、Wiresharkは低レベルのネットワーク分析に適しています。
| ツール | タイプ | キーなしHTTPS | トラフィック変更 |
|---|---|---|---|
| Wireshark | スニファー | いいえ(SSLKEYLOGFILEが必要) | 表示のみ |
| Charles | プロキシ | はい(カスタム証明書) | はい |
| Fiddler | プロキシ | はい(カスタム証明書) | はい |
| tcpdump | スニファー | いいえ | 表示のみ |
Wiresharkを使用するには、トラフィックキャプチャの基本原則の理解が必要です。よくあるシナリオの1つは、tcp.analysis.ack_rttフィルターを使用してモバイルアプリの遅延の原因を探すことです。遅いHTTPリクエストを見つけるには、http.timeが1より大きい条件を使用します。
遅いHTTPリクエストを見つけるには、http.timeが1より大きいでフィルタリングします。Wiresharkは応答時間が1秒を超えるリクエストを表示します。特定のサーバーを分析するにはip.addrと組み合わせます。1秒間隔のIO Graphは負荷のピークを明確に示します。
Wiresharkは、FileメニューからCSV、JSON、XMLへのエクスポートをサポートします。自動分析には、CI/CDパイプラインで動作するコンソール版のtsharkを使用します。Tsharkはグラフィカル版と同じフィルターと出力形式をサポートします。
Wiresharkを使用するには、トラフィックキャプチャの基本原則の理解が必要です。よくあるシナリオの1つは、tcp.analysis.ack_rttフィルターを使用してモバイルアプリの遅延の原因を探すことです。遅いHTTPリクエストを見つけるには、http.timeが1より大きい条件を使用します。
遅いHTTPリクエストを見つけるには、http.timeが1より大きいでフィルタリングします。Wiresharkは応答時間が1秒を超えるリクエストを表示します。特定のサーバーを分析するにはip.addrと組み合わせます。1秒間隔のIO Graphは負荷のピークを明確に示します。
Wiresharkは、FileメニューからCSV、JSON、XMLへのエクスポートをサポートします。自動分析には、CI/CDパイプラインで動作するコンソール版のtsharkを使用します。Tsharkはグラフィカル版と同じフィルターと出力形式をサポートします。
よくある質問
Wiresharkは、パケットの可視化、組み込みフィルター、統計を備えたグラフィカルインターフェースを提供します。tcpdumpはGUIのないコンソールユーティリティで、SSH経由のサーバーキャプチャに便利です。Wiresharkはtcpdumpのファイルを読むことができ、その逆も可能です。
復号にはTLSセッションキーファイル(SSLKEYLOGFILE)が必要です。ChromeとFirefoxは環境変数を指定して起動するとキーをエクスポートします。ファイルへのパスは、WiresharkのProtocols → TLS設定で指定します。
Windowsのloopbackトラフィックは、デフォルトではNpcapドライバーを通過しません。解決策は、Loopback Supportオプションを有効にしてNpcapをインストールするか、ローカルトラフィックのキャプチャにRawCapユーティリティを使用することです。
はい、トラフィックをコンピューターにプロキシすることで可能です。AndroidはPCAPdroid(rootなし)またはtcpdump(rootあり)によるキャプチャをサポートしています。iOSでは、キャプチャにmacOS経由のRVI(Remote Virtual Interface)またはjailbreakが必要です。
display filterのframe containsは、パケット全体から文字列または16進シーケンスを検索します。例:frame contains "password"は、任意のフィールドにpassword部分文字列を含むパケットを見つけます。フィールドによる正確な検索には、http.request.uri contains "api"を使用します。
まとめ
ターンキー方式のモバイルアプリケーションを開発します
IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。