Wiresharkで学ぶパケット解析の基本手順

ネットワークトラブルの原因を特定するには、Wiresharkでパケットをキャプチャして解析するのが最も効果的です。HTTPリクエストの遅延、DNSの名前解決不具合、TCPの再送制御など、具体的な問題はすべてパケットレベルで可視化されます。そのため、ネットワークエンジニアはもちろん、システム運用者やセキュリティ監視担当者にとって、Wiresharkの基本操作を習得することは必須です。本記事では、Wiresharkを使ったパケット解析の基本手順を、実務で即活用できるレベルまで丁寧に解説します。初心者でも迷わずキャプチャから解析まで進められるよう、画面ショットを交えながら具体的な操作手順を紹介します。


目次


Wiresharkとは:パケット解析の定番ツール

Wiresharkは、オープンソースのネットワークパケットアナライザであり、世界中のネットワークエンジニアに広く利用されています。TCP/IP、HTTP、DNS、DHCPなど、さまざまなプロトコルのパケットをリアルタイムでキャプチャし、詳細な解析を可能にします。Wiresharkの最大の特徴は、グラフィカルなインターフェースで直感的に操作できる点にあり、コマンドラインツールであるtcpdumpと比較して、初心者でも扱いやすいことが挙げられます。

Wiresharkの公式サイトによると、2024年現在で1,500以上のプロトコルに対応しており、企業のネットワーク監視やセキュリティ調査、アプリケーションのパフォーマンスチューニングなど、幅広い用途で活用されています(出典: Wireshark公式サイト)。また、Wiresharkは無償で利用できるだけでなく、ソースコードも公開されているため、カスタマイズや拡張も容易です。

Wiresharkの主な用途

用途具体的な活用シーン解析対象プロトコル
ネットワークトラブルシューティング通信遅延の原因特定、接続不良の診断TCP, UDP, ICMP, DNS, HTTP
セキュリティ監視不正な通信パターンの検知、マルウェア感染の調査HTTP, HTTPS, DNS, ARP, TCP
アプリケーションパフォーマンス解析APIリクエストの遅延分析、データベースクエリの最適化HTTP, HTTPS, SQL, LDAP
プロトコルの学習TCP/IPの動作原理、HTTP/2やQUICの仕組み理解TCP, UDP, IP, HTTP, TLS

Wiresharkを使いこなすことで、ネットワークの「見えない部分」を可視化し、問題解決の精度を飛躍的に向上させることができます。特に、HTTP/HTTPSの通信解析やDNSの名前解決不具合の特定など、実務で頻繁に遭遇するトラブルに対して、即座に対応策を講じることが可能になります。


Wiresharkのインストールと初期設定

Wiresharkを使い始めるには、まず公式サイトからインストーラをダウンロードし、自分のOSに合わせてインストールします。Windows、macOS、Linuxの各プラットフォームに対応しており、インストール手順は非常にシンプルです。ここでは、WindowsとmacOSでのインストール手順を解説します。

Windowsへのインスト…

  1. 公式サイト(https://www.wireshark.org/download.html)から、Windows用のインストーラをダウンロードします。
  2. ダウンロードしたインストーラ(例:Wireshark-win64-4.2.0.exe)を実行します。
  3. インストーラの指示に従い、ライセンス条項に同意してインストールを進めます。
  4. 「WinPcap」と「USO Core」のインストールを求められた場合は、いずれもチェックを入れてインストールします。
  5. インストール完了後、デスクトップに作成されたWiresharkのアイコンをダブルクリックして起動します。

Windows版Wiresharkをインストールすると、同時に「WinPcap」というパケットキャプチャ用のライブラリもインストールされます。WinPcapは、ネットワークインターフェースからパケットをキャプチャするために必要なドライバであり、Wiresharkが正常に動作するためには必須です。

macOSへのインストール手順

macOSでは、Homebrewを使って簡単にインストールできます。ターミナルを開き、以下のコマンドを実行します。

brew install --cask wireshark

インストールが完了したら、LaunchpadからWiresharkを起動します。macOSの場合、パケットキャプチャには「libpcap」というライブラリが使用されます。Homebrewを使ってWiresharkをインストールすると、libpcapも自動的にインストールされます。

初期設定:キャプチャインタ…

Wiresharkを起動すると、最初にキャプチャするネットワークインターフェースを選択する画面が表示されます。一般的なPCでは、以下のようなインターフェースが表示されます。

  • Wi-Fi(無線LAN)
  • Ethernet(有線LAN)
  • Loopback(ローカルループバック)
  • VPN接続(例:WireGuard、OpenVPN)

キャプチャしたいインターフェースを選択し、青色の「 shark fin(キャプチャ開始)」ボタンをクリックします。例えば、自宅のWi-Fi経由でインターネットに接続している場合は、「Wi-Fi」を選択します。

設定項目のカスタマイズ

Wiresharkの設定は、メニューの「Edit」→「Preferences」からカスタマイズできます。主な設定項目は以下の通りです。

設定項目説明推奨設定
Name ResolutionIPアドレスをホスト名に変換する機能「Resolve MAC addresses」と「Resolve network addresses」を有効化
Columnsキャプチャ画面に表示される列のカスタマイズ「Time」「Source」「Destination」「Protocol」「Length」「Info」を表示
Captureキャプチャ時の動作設定「Stop capture automatically after…」を無効化(手動で停止)
Protocols各プロトコルの詳細設定特に変更不要(デフォルト設定で十分)

これらの設定を適切にカスタマイズすることで、解析作業がより効率的になります。特に「Name Resolution」を有効にすると、IPアドレスだけでなくホスト名も表示されるため、解析時の可読性が向上します。


パケットキャプチャの基本手順

Wiresharkを使ったパケット解析の第一歩は、パケットのキャプチャです。キャプチャとは、ネットワーク上を流れるパケットを収集し、ローカルに保存することです。ここでは、基本的なキャプチャ手順と、キャプチャファイルの保存方法について解説します。

キャプチャの開始と停止

  1. Wiresharkを起動し、キャプチャしたいネットワークインターフェースを選択します。
  2. 青色の「 shark fin(キャプチャ開始)」ボタンをクリックします。キャプチャが開始されると、画面上部のステータスバーに「Capturing…」と表示されます。
  3. キャプチャを停止するには、赤色の「Stop(停止)」ボタンをクリックします。停止後、キャプチャしたパケットが画面に表示されます。

キャプチャ中は、画面下部のステータスバーに「X packets captured」と表示され、リアルタイムでキャプチャされたパケット数が更新されます。例えば、1分間のキャプチャで1,200個のパケットがキャプチャされた場合、ステータスバーには「1,200 packets captured」と表示されます。

キャプチャファイルの保存と…

キャプチャしたパケットは、Wiresharkの独自形式である「.pcapng」ファイルとして保存できます。保存したファイルは、後で再度Wiresharkで開いて解析することが可能です。

保存手順は以下の通りです。

  1. キャプチャを停止します。
  2. メニューの「File」→「Save As…」を選択します。
  3. 保存先のディレクトリとファイル名を指定し、「保存」ボタンをクリックします。

保存したファイルを開くには、メニューの「File」→「Open…」を選択し、保存したファイルを選択します。また、ドラッグ&ドロップでファイルを開くこともできます。

キャプチャオプションの設定

Wiresharkでは、キャプチャ時にさまざまなオプションを設定できます。例えば、特定のプロトコルのみをキャプチャしたり、キャプチャするパケットサイズを制限したりすることが可能です。

キャプチャオプションを設定するには、メニューの「Capture」→「Options…」を選択します。以下のようなオプションが設定できます。

オプション説明設定例
Capture Filter特定の条件に合致するパケットのみをキャプチャ「tcp port 80」と入力すると、TCPポート80(HTTP)のパケットのみをキャプチャ
Buffer Sizeキャプチャバッファのサイズを指定デフォルトの100MBから1GBに変更すると、大量のパケットをキャプチャ可能
Snap Length1パケットあたりのキャプチャサイズを指定デフォルトの262,144バイトから65,535バイトに変更すると、不要なデータを削減
Promiscuous Mode同一セグメント上のすべてのパケットをキャプチャ有線LANの場合は有効化(無線LANでは動作しない場合あり)

これらのオプションを適切に設定することで、不要なパケットを排除し、解析作業を効率化できます。特に「Capture Filter」を使うと、特定のプロトコルやポートに絞ったキャプチャが可能になり、解析時の負荷を軽減できます。

キャプチャ時の注意点

Wiresharkでパケットをキャプチャする際には、以下の点に注意してください。

  • 管理者権限が必要:WindowsやmacOSでは、パケットキャプチャを行うために管理者権限が必要な場合があります。管理者権限でWiresharkを起動してください。
  • プライバシーへの配慮:キャプチャしたパケットには、メールの内容やWebサイトの閲覧履歴など、機密情報が含まれる場合があります。社内や個人利用の範囲で解析を行い、外部に漏洩しないよう注意してください。
  • ネットワークの負荷:大量のパケットをキャプチャすると、ネットワークやPCの負荷が高くなります。特に、高トラフィックのネットワークでキャプチャを行う場合は、キャプチャ時間を短くするか、フィルタを活用して不要なパケットを排除してください。

これらの注意点を守ることで、安全かつ効率的にパケットキャプチャを行うことができます。


フィルタリング機能で効率的に解析

Wiresharkの最大の特徴の一つが、強力なフィルタリング機能です。キャプチャした膨大なパケットの中から、特定の条件に合致するパケットのみを抽出することで、解析作業を大幅に効率化できます。ここでは、キャプチャフィルタと表示フィルタの使い分けと、具体的なフィルタリングテクニックを解説します。

キャプチャフィルタと表示フ…

Wiresharkには、大きく分けて2種類のフィルタがあります。それぞれの特徴と使い分けを理解しておきましょう。

フィルタタイプ適用タイミング特徴使用例
キャプチャフィルタキャプチャ前に設定指定した条件に合致するパケットのみをキャプチャ。不要なパケットを排除し、キャプチャファイルのサイズを小さくできる。「tcp port 443」と入力すると、HTTPS(TCPポート443)のパケットのみをキャプチャ
表示フィルタキャプチャ後に設定キャプチャしたすべてのパケットから、条件に合致するパケットのみを表示。キャプチャファイルを再度キャプチャし直す必要がない。「http.response.code == 404」と入力すると、HTTP 404エラーレスポンスのみを表示

キャプチャフィルタは、キャプチャ時にのみ機能します。そのため、キャプチャ後に条件を変更することはできません。一方、表示フィルタはキャプチャ後に自由に条件を変更でき、柔軟な解析が可能です。実務では、まずキャプチャフィルタで不要なパケットを排除し、表示フィルタで詳細な解析を行うという流れが一般的です。

キャプチャフィルタの使い方

キャプチャフィルタは、Wireshark起動直後のインターフェース選択画面で設定します。キャプチャを開始する前に、画面上部の「Capture Filter」ボックスにフィルタ式を入力します。

主なキャプタフィルタの例を以下に示します。

フィルタ式説明使用シーン
host 192.168.1.1特定のIPアドレスとの通信のみをキャプチャ特定のサーバやクライアントの通信を解析
port 80 or port 443HTTP(ポート80)またはHTTPS(ポート443)の通信のみをキャプチャWebブラウザの通信を解析
tcpTCPプロトコルのパケットのみをキャプチャTCPのコネクション確立や再送制御を解析
udpUDPプロトコルのパケットのみをキャプチャDNSクエリやVoIPの通信を解析
icmpICMPプロトコルのパケットのみをキャプチャpingコマンドの応答やネットワーク障害の診断
not arpARPプロトコル以外のパケットをキャプチャARPの不要な通信を排除して解析を効率化

キャプチャフィルタを使うことで、例えば「特定のWebサイトへのアクセスのみを解析したい」といった要件に柔軟に対応できます。キャプチャフィルタの構文は、後述の表示フィルタと共通していますので、覚えておくと便利です。

表示フィルタの使い方

表示フィルタは、キャプチャ後に画面上部の「Filter」ボックスに入力します。表示フィルタを入力すると、即座に条件に合致するパケットのみが表示されます。表示フィルタは、キャプチャしたすべてのパケットに対して機能するため、柔軟な解析が可能です。

主な表示フィルタの例を以下に示します。

フィルタ式説明使用シーン
httpHTTPプロトコルのパケットを表示Webアプリケーションの通信を解析
dnsDNSプロトコルのパケットを表示DNSの名前解決不具合を診断
tcp.analysis.retransmissionTCPの再送パケットを表示ネットワークの輻輳やパケットロスを診断
http.response.code >= 400HTTPステータスコードが400番台(クライアントエラー)以上のレスポンスを表示Webサーバのエラーを特定
ip.addr == 192.168.1.1 && tcp.port == 80特定のIPアドレスとTCPポート80(HTTP)の通信を表示特定のWebサーバへのアクセスを解析
!(arp or icmp or dns)ARP、ICMP、DNS以外のプロトコルを表示不要なプロトコルを排除して解析を効率化

表示フィルタの構文は、後述の「フィルタ式の構文」で詳しく解説します。表示フィルタを使いこなすことで、例えば「特定のHTTPステータスコードのレスポンスのみを表示」といった高度な解析が可能になります。

フィルタ式の構文

Wiresharkのフィルタ式は、以下のような構文で記述します。

  • プロトコル指定:`http`、`tcp`、`udp`、`dns`など、プロトコル名を直接指定します。
  • フィールド指定:`ip.addr`(IPアドレス)、`tcp.port`(TCPポート)、`http.request.method`(HTTPリクエストメソッド)など、特定のフィールドを指定します。
  • 比較演算子:`==`(等しい)、`!=`(等しくない)、`>`(より大きい)、`<`(より小さい)、`>=`(以上)、`<=`(以下)などを使用します。
  • 論理演算子:`&&`(AND)、`||`(OR)、`!`(NOT)を使用して複数の条件を組み合わせます。

具体的なフィルタ式の例を以下に示します。

  • `ip.src == 192.168.1.1 && tcp.port == 80`:送信元IPアドレスが192.168.1.1で、TCPポート80(HTTP)のパケットを表示
  • `http.request.method == “GET” && http.host contains “example.com”`:HTTP GETリクエストで、ホスト名に「example.com」を含むパケットを表示
  • `!(arp or icmp)`:ARPとICMP以外のパケットを表示
  • `tcp.analysis.duplicate_ack`:TCPの重複ACKを検出したパケットを表示

これらの構文を組み合わせることで、非常に柔軟なフィルタリングが可能になります。例えば、以下のような複雑な条件も指定できます。

  • `(ip.addr == 192.168.1.1 || ip.addr == 192.168.1.2) && tcp.port == 443 && http.response.code == 200`:特定の2つのIPアドレスからのHTTPS(ポート443)通信で、HTTP 200 OKレスポンスのみを表示

表示フィルタを使いこなすことで、膨大なパケットの中から必要な情報だけを素早く抽出し、解析作業を効率化できます。


主要な解析機能と実践テクニック

Wiresharkには、パケット解析を支援するさまざまな機能が備わっています。ここでは、実務で頻繁に使用する主要な解析機能と、その活用テクニックについて解説します。これらの機能を使いこなすことで、ネットワークの問題を迅速かつ正確に診断できるようになります。

パケットの詳細表示

Wiresharkでは、キャプチャしたパケットを選択すると、その詳細情報が画面下部の「Packet Details」パネルに表示されます。このパネルでは、パケットの各レイヤ(Ethernet、IP、TCP/UDP、アプリケーション層)のヘッダ情報が階層構造で表示されます。

例えば、HTTPリクエストのパケットを選択すると、以下のような詳細情報が表示されます。

  • Frame:パケット全体の情報(キャプチャ時刻、パケット長、キャプチャファイル内の位置など)
  • Ethernet II:MACアドレス情報(送信元MAC、宛先MAC)
  • Internet Protocol Version 4:IPヘッダ情報(送信元IP、宛先IP、TTLなど)
  • Transmission Control Protocol:TCPヘッダ情報(送信元ポート、宛先ポート、シーケンス番号、ACK番号など)
  • Hypertext Transfer Protocol:HTTPリクエストの詳細(リクエストメソッド、URL、HTTPヘッダなど)

これらの詳細情報を確認することで、例えば以下のような問題を特定できます。

  • MACアドレスの不一致:送信元MACアドレスと宛先MACアドレスが異常な値を示している場合、ARPスプーフィングなどの攻撃が疑われます。
  • TTL(Time To Live)の異常:TTLが通常よりも小さい値(例えば1)を示している場合、パケットがループしている可能性があります。
  • TCPの再送制御:シーケンス番号やACK番号の不整合が見られる場合、ネットワークの輻輳やパケットロスが発生している可能性があります。
  • HTTPステータスコード:404 Not Foundや500 Internal Server Errorなどのエラーレスポンスが返されている場合、Webサーバ側の問題が疑われます。

Follow TCP St…

「Follow TCP Stream」機能は、特定のTCPコネクションに属するすべてのパケットを抽出し、ストリームとして表示する機能です。この機能を使うことで、例えばHTTP通信のリクエストとレスポンスの対応関係を簡単に確認できます。

「Follow TCP Stream」を実行する手順は以下の通りです。

  1. 解析したいTCPパケットを選択します。
  2. 右クリックメニューから「Follow」→「TCP Stream」を選択します。
  3. 新しいウィンドウが開き、選択したTCPコネクションに属するすべてのパケットが表示されます。

表示されるストリームは、送信元から宛先への通信(通常は青色)と、宛先から送信元への通信(通常は赤色)に色分けされています。例えば、HTTPリクエストの場合、青色の部分がリクエスト、赤色の部分がレスポンスとして表示されます。

「Follow TCP Stream」を使うことで、以下のような解析が可能になります。

  • HTTP通信の解析:リクエストヘッダやレスポンスヘッダ、ボディの内容を確認し、例えばCookieの設定やリダイレクトの動作を解析します。
  • TLS/SSL通信の解析:暗号化された通信であっても、Wiresharkはハンドシェイクパケットを解析し、暗号化前のデータを表示できます(ただし、アプリケーションデータの内容までは表示できません)。
  • WebSocket通信の解析:WebSocketのフレームを解析し、リアルタイムのメッセージ交換を確認します。

「Follow TCP Stream」は、アプリケーション層のプロトコル解析において非常に強力な機能です。実務では、Webアプリケーションの動作不良やAPIのレスポンス遅延などを診断する際に頻繁に使用します。

IO Graph

「IO Graph」は、ネットワークトラフィックの時間的な変化をグラフ化する機能です。この機能を使うことで、例えば以下のような問題を視覚的に把握できます。

  • トラフィックの急増:特定の時間帯にトラフィックが急増している場合、DDoS攻撃やバックアップジョブの実行などが疑われます。
  • 通信の途絶:突然トラフィックが途絶えた場合、ネットワーク機器の障害やケーブルの断線などが疑われます。
  • 周期的なパターン:一定の間隔でトラフィックが増減する場合、定期的なバッチ処理やスケジュールされたジョブが実行されている可能性があります。

「IO Graph」を表示する手順は以下の通りです。

  1. メニューの「Statistics」→「IO Graph」を選択します。
  2. 新しいウィンドウが開き、トラフィックのグラフが表示されます。

グラフのX軸は時間、Y軸はパケット数またはバイト数を表します。デフォルトでは、すべてのパケットが対象となっていますが、表示フィルタを設定することで、特定のプロトコルやIPアドレスのトラフィックのみを表示することも可能です。

【編集・制作ポリシー】
本記事はRoute Bloom編集部が各ベンダー公式ドキュメント・エンジニア監修をもとに作成しています。インフラ・クラウド構築は環境により異なります。本番環境への適用前に必ずテストを実施してください。情報の正確性には万全を期していますが、最新情報は各公式ドキュメントをご確認ください。
ABOUT ME
たから
サラリーマンをしながら開業して経営やってます。 今年、本業で独立・別事業を起業予定です。 ◆経験:IT講師/インフラエンジニア/PM/マネジメント/採用/運用・保守・構築・設計 ◆取得資格:CCNA/CCNP/LPIC-1/AZ-900/FE/サーティファイC言語 ◆サイドビジネス:アパレル事業/複数のWEBメディアを運営