【Wireshark】パケット解析の基礎と実践的なフィルタリング設定

  • URLをコピーしました!
目次

はじめに

ネットワークのトラブルシューティングやセキュリティ監査において、パケットキャプチャは不可欠な技術です。その中でも、オープンソースで提供されている Wireshark は、事実上の標準ツール(デファクトスタンダード)として多くのエンジニアに利用されています。

しかし、トラフィック量の多い環境では膨大なパケットが記録されるため、目的の通信だけを素早く見つけ出す「フィルタリング」のスキルが作業効率を大きく左右します。

本記事では、Wireshark の基本的な役割とインストール手順から、実務で頻出する IP アドレスや TCP フラグの条件指定、モダンな暗号化通信の解析、そして Web アプリケーション障害に役立つ HTTP ステータスコードでの抽出方法まで、実践的なフィルタリング設定を客観的に解説します。

この記事でわかること
  • Wireshark の基本的な役割と OS ごとのインストール手順
  • キャプチャフィルタとディスプレイフィルタの仕様の違い
  • IP アドレス、TCP フラグ、DNS などを指定した基礎的なパケット抽出手順
  • TLS の SNI や QUIC などを用いたモダンプロトコルの解析手法
  • HTTP ステータスコードを活用した Web アプリケーション障害の調査方法

Wireshark の概要とネットワーク解析における活用シーン

Wireshark は、ネットワークインターフェースを通過するトラフィックをキャプチャし、人間が理解できる形式で可視化するネットワークプロトコルアナライザです。

パケットキャプチャツールの役割

ネットワーク上を流れるデータは、電気信号や光信号のパルスとして伝送されます。Wireshark はこの生データを収集し、Ethernet や IP、TCP、HTTP といった各プロトコルの階層構造(OSI 参照モデル)に沿ってデコード(翻訳)します。

これにより、パケットのヘッダ情報やペイロード(データ本体)の中身を GUI 上で直感的に確認できるようになり、通信の裏側でシステムがどのようなやり取りを行っているのかを正確に把握することが可能になります。

通信障害の切り分けやセキュリティ監査での活用

システム開発やインフラ運用の現場において、Wireshark は主に「見えない通信のブラックボックス化」を防ぐために活用されます。

例えば、クライアントとサーバー間で通信エラーが発生した場合、それがネットワークインフラの遅延(パケットロスや再送)によるものなのか、サーバー側アプリケーションの不具合なのかを、パケットの到達状況から客観的に切り分けることができます。 また、セキュリティ監査においては、平文で送信されている機密情報(Telnet や HTTP での認証情報)の検知や、マルウェアによる不審な外部通信の解析など、多岐にわたる用途で利用されます。

Wireshark のダウンロードとインストール手順

フィルタリング機能を活用する前に、まずは手元の環境に Wireshark をセットアップする必要があります。

公式サイトからの安全なダウンロード

セキュリティの観点から、インストーラーは必ず公式サイト(wireshark.org)からダウンロードしてください。Windows、macOS、Linux など、利用中の OS に適合した最新の安定版(Stable Release)を選択することが基本です。

OS ごとのインストールとパケットキャプチャドライバの導入

インストールウィザードは基本的にデフォルトの設定で進めて問題ありませんが、OS によってパケットをキャプチャするための基盤コンポーネントが異なります。

Windows 環境

インストール途中で Npcap(ネットワークパケットキャプチャライブラリ)のインストールが求められます。これが無いとネットワークトラフィックを捕捉できないため、必ずチェックを入れて同時にインストールしてください。

macOS 環境

キャプチャ用デバイスへのアクセス権限を付与するため、ChmodBPF というコンポーネントのインストールが必要です。こちらもウィザードの指示に従い、システム環境設定で許可を与えてください。

フィルタリングの基本仕様と 2 つの方式

Wireshark のフィルタリングには、大きく分けて「キャプチャフィルタ」と「ディスプレイフィルタ」の 2 つの方式が存在します。本記事で扱うのは、より柔軟で実務によく使われる後者のディスプレイフィルタです。

キャプチャフィルタとディスプレイフィルタの違い

キャプチャフィルタ(Capture Filter)

パケットをネットワークインターフェースから取得する「前」に適用されます。ディスク容量を節約したい場合などに有効ですが、一度除外されたパケットは後から解析できないという注意点があります。

ディスプレイフィルタ(Display Filter)

パケットを取得した「後」の画面表示に対して適用されます。すべての通信データを保持したまま、画面上に表示するパケットだけを絞り込むため、事後解析やトラブルシューティングで最も頻繁に使用されます。

演算子を用いた条件指定の基本

ディスプレイフィルタでは、複数の条件を組み合わせるために論理演算子を使用します。

AND 条件(かつ)

and または && を使用します。

OR 条件(または)

or または || を使用します。

比較演算子

==(等しい)、!=(等しくない)、>=(以上)などを組み合わせて、特定の IP アドレスやポート番号を正確に指定します。

実務でよく使う基本的なフィルタリング設定(IP・TCP・プロトコル編)

ここでは、トラブルシューティングで直ちに使える IP アドレス、TCP フラグ、およびよく使われるプロトコルの抽出条件を整理します。コピーアンドペーストしてすぐに活用できるようまとめています。

特定の IP アドレスやポート番号の抽出

通信の送信元(Source)や送信先(Destination)、ポート番号を特定することは、解析の第一歩です。

  • 送信元 IP アドレスを指定: 送信元が 192.168.1.1 のパケットのみを表示します。
ip.src == 192.168.1.1
  • 特定の IP アドレス(送信元・送信先問わず)を除外する: 指定した IP アドレスをノイズとして非表示にします。
ip.addr != 192.168.1.1
  • 特定のサブネット(CIDR)を指定する: ネットワークセグメント全体を対象に絞り込みます。
ip.addr == 192.168.1.0/24
  • TCP ポート番号の複数指定(80 番や 443 番など): 複数のポートを条件に含める場合は in 演算子が便利です。
tcp.port in {80 443}

TCP フラグ(SYN、ACK、RST)によるセッション状態や異常の確認

TCP 通信において、コネクションの確立(3 ウェイハンドシェイク)や、強制切断の有無を確認する際に役立ちます。

  • SYN フラグが設定されたパケット(接続要求)
tcp.flags.syn == 1
  • ACK フラグが設定されたパケット(確認応答)
tcp.flags.ack == 1
  • RST フラグが設定されたパケット(異常切断の追跡): 通信が強制リセットされた原因を調査する際に多用します。
tcp.flags.reset == 1

アプリケーションプロトコル(DNS や DHCP など)による絞り込み

通信のペイロードに含まれる特定のプロトコルを指定することで、名前解決や IP アドレス割り当てのパケットを素早く抽出できます。

  • プロトコル単体での抽出(DNS や ICMP)
dns or icmp
  • 特定のドメインに対する DNS クエリの抽出: 障害対象のドメイン名を指定して名前解決を追跡します。
dns.qry.name == "example.com"
  • DHCP のやり取りを抽出: IP アドレスの割り当てプロセス(DORA フロー)を確認します。
bootp

現代のトラフィック解析で役立つモダンなフィルタリング設定

Web 通信の暗号化(TLS 1.3)や UDP ベースのプロトコル(QUIC)が主流となった現代の環境において、問題の切り分けに活用できるフィルタリング設定を紹介します。

TLS の SNI(Server Name Indication)を用いた抽出

現代の Web 通信は暗号化されているため、従来の http.host では宛先ドメインを判別できないケースが増えています。代わりに、TLS ハンドシェイク(Client Hello)に含まれる SNI を指定して、特定のドメイン宛ての暗号化トラフィックを抽出します。

  • 特定のドメイン宛ての TLS 通信を抽出
tls.handshake.extensions_server_name == "example.com"

QUIC(HTTP/3)トラフィックの特定と正規表現(matches)の活用

次世代プロトコルである HTTP/3 は TCP ではなく UDP(UDP ポート 443)を使用します。また、複雑な条件指定には正規表現が有効です。

  • QUIC プロトコルのパケットを抽出
quic
  • 正規表現による URI の柔軟な検索: 演算子 matches を使用し、特定の文字列パターン(例: /api/ から始まる URI)を持つ HTTP リクエストを抽出します。
http.request.uri matches "^/api/"

HTTP ステータスコードを用いた Web トラブルシューティング

Web サーバーとクライアント間の通信において、画面上にエラーが表示された際、ネットワークレベルでどのリクエストが失敗しているのかを特定することが重要です。

http.response.code を活用したエラーパケットの抽出

HTTP トラフィックの中から、特定のレスポンスコードを持つパケットのみを絞り込むことができます。エラーのみを抽出する際に非常に効果的です。

  • ステータスコード 400 以上のパケット(エラー全般)
http.response.code >= 400
  • ステータスコード 200 のパケット(正常な応答)
http.response.code == 200

400 番台・500 番台のレスポンスから異常を特定するアプローチ

実務では、エラーの性質に応じてさらに細かく条件を指定し、問題の切り分けを行います。特にリバースプロキシやロードバランサーを経由する環境では、特定のステータスコードを狙い撃ちすることが有効です。

  • クライアントエラー(400 番台)の抽出: 認証失敗(401)やファイルが見つからない(404)などのエラーを追跡します。
http.response.code >= 400 and http.response.code < 500
  • サーバーエラー(500 番台)の抽出: サーバー内部のエラー(500)やゲートウェイのタイムアウト(504)など、バックエンド側の問題を特定します。
http.response.code >= 500
  • サービス利用不可(503)の特定: サーバーの過負荷やメンテナンスによる「Service Unavailable」のみをピンポイントで抽出します。
http.response.code == 503
  • リダイレクト(300 番台)の追跡: リダイレクトループ(ERR_TOO_MANY_REDIRECTS)などの原因調査に活用します。
http.response.code >= 300 and http.response.code < 400

これらのフィルタリングを適用することで、膨大な Web トラフィックの中から障害の根本原因(Root Cause)となるパケットを瞬時に見つけ出し、詳細なペイロード解析へとスムーズに移行できます。

まとめ

本記事では、Wireshark の基礎知識とインストール手順、実務で役立つ実践的・発展的なフィルタリング設定について解説しました。

  • Wireshark は公式サイト(wireshark.org)からダウンロードし、必須ドライバを導入する。
  • ディスプレイフィルタと論理演算子を組み合わせることで柔軟なパケット抽出が可能になる。
  • IP アドレス、TCP フラグ、DNS などを指定し、特定のセッション状態や通信の切断箇所を追跡する。
  • 現代のトラフィックでは TLS の SNI や QUIC(HTTP/3)を考慮したフィルタリングを活用する。
  • HTTP ステータスコード(400 番台や 500 番台など)で Web のエラー原因を瞬時に特定する。

以上、最後までお読みいただきありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

インフラ(クラウド/NW/仮想化)から Web 開発まで、技術領域を横断して活動するエンジニア💻 コンシューマー向けエンタメ事業での新規開発・運営経験を活かし、実戦的な技術ノウハウを発信中

[ Certs ] CCIE Lifetime Emeritus / VCAP-DCA ✒️ [ Life ] 技術書・ビジネス書愛好家📖 / 小・中学校で卓球コーチ👟

目次