Wireshark とは — パケットキャプチャと解析の標準ツール のサムネイル

Wireshark とは — パケットキャプチャと解析の標準ツール

⏱ 約 12 分 view 133 like 0 LOG_DATE:2026-05-29
目次 / TOC

Wireshark は、ネットワーク上を流れるパケットをそのまま捕まえて中身を解読する、世界で最も広く使われるパケットキャプチャ/解析ツール。1998 年に Gerald Combs 氏が Ethereal として開発を始め、2006 年に商標問題で Wireshark に改名された OSS。現在は 3,000 以上のプロトコルをデコードでき、ネットワーク障害切り分け・セキュリティ調査・プロトコル学習・マルウェア解析の事実上の標準になっている。本稿では libpcap/Npcap によるキャプチャの仕組み / 表示フィルタと統計機能 / TCP・TLS の追跡例 / tshark CLI / 限界 (暗号化ペイロード) と関連ツール (tcpdump / Zeek / Suricata) との使い分けまで扱う。

01

Wireshark とは何か — パケットを「見る」ツール #

通常、ネットワークは「アプリ → OS → NIC → 線」と動いて見えないが、Wireshark は NIC を流れる全パケット (自分宛/自分発以外も含む) を OS のフック越しに取り込んで、レイヤごとにデコードして表示する。

▸ Wireshark が見せるもの

Ethernet ヘッダ → IP ヘッダ → TCP/UDP ヘッダ → アプリケーションプロトコル (HTTP / DNS / TLS / SMB / Kerberos / 産業用プロトコルまで) の全フィールドを階層的に表示。通信のタイミング・サイズ・順序・再送・RTT もミリ秒単位で追える。「ネットワークで何が起きているか」を直接観測できる唯一の汎用ツール

歴史 #

  • 1998 — Gerald Combs 氏 (当時 25 歳) が「市場の商用ツールが高すぎる」という理由で個人開発を始める。Ethereal の名で公開
  • 2006 — 商標を雇用主が握っていた問題で Combs 氏が転職と同時に Wireshark に改名・移管
  • 2008 — Wireshark Foundation 設立 (現在は Sysdig 配下に近い形で運営)
  • 2025 — バージョン 4.x、SCADA / IoT / QUIC / HTTP/3 / WireGuard / WPA3 など最新プロトコルにも対応

競合と位置づけ #

商用ツール (OmniPeek, LiveAction) も存在するが、Wireshark は OSS かつデコーダの数で他を圧倒しているため、業界教科書 (Cisco / OWASP / SANS / TOEIC 並の認定資格である WCNA = Wireshark Certified Network Analyst) でも事実上の前提知識として扱われる。

02

仕組み — libpcap と Npcap #

Wireshark 自体は「表示と解析の GUI」であり、パケット取得は libpcap (Linux/macOS) または Npcap (Windows) という別ライブラリが担当する。

1. NIC をプロミスキャスモードに
通常 NIC は自分宛 MAC のフレームしか上位に上げないが、プロミスキャス (promiscuous) モードにすると、有線セグメント上を流れる全フレームを取り込む。
2. カーネル内で BPF フィルタ
取り込んだフレームに対して BPF (Berkeley Packet Filter) を適用。カーネル内で不要パケットを落としてから userland に上げるので、フルロード環境でも CPU 負荷が抑えられる。
3. リングバッファ経由で userland へ
PF_PACKET (Linux) や Npcap が mmap リングバッファでパケットを Wireshark プロセスに渡す。
4. ディセクタが各層を解読
Wireshark のディセクタ (dissector) が Ethernet → IP → TCP → アプリ層と順にデコード。各層のフィールドが GUI のツリーに展開される。

スイッチ環境では「自分の通信しか見えない」 #

現代の Ethernet はハブではなくスイッチが基本で、スイッチは宛先 MAC のポートにしかフレームを送らない。プロミスキャスモードにしても、自分宛/自分発以外のパケットは届かない。これを乗り越えるには:

  • ポートミラーリング (SPAN ポート) — スイッチ管理画面で「ポート 3 の全通信をポート 5 にもコピーして」と設定。Wireshark をポート 5 に挿す
  • TAP デバイス — 物理的にラインに割り込んで分岐させる装置 (ProfiTAP, Garland 等)
  • ホスト上で直接キャプチャ — そのホストの NIC のループ箇所を捕る (自分自身の通信は確実に見える)
  • ARP スプーフィング — 別ホストの通信を自分のポートに流させる (攻撃寄りで通常運用では使わない)
  • Wi-Fi モニタモード — Wi-Fi なら無線フレーム全体を傍受可能 (ただし WPA2 以降は暗号化される)
03

フィルタ — キャプチャフィルタと表示フィルタ #

Wireshark の最重要機能。フィルタは 2 種類あり、書き方が違う ので注意。

キャプチャフィルタ (BPF syntax) #

カーネル内でパケットを「取り込む前に」落とすフィルタ。書き方は tcpdump と同じ BPF 構文。

キャプチャフィルタ — BPF
# ポート 443 のみ tcp port 443

# 特定ホストとの通信のみ host 192.168.1.10

# そのホストの 80 のみ host 192.168.1.10 and tcp port 80

# ARP は除外 not arp

大量トラフィック環境では必須。GbE フルロードでフィルタなしで取ると数 GB/分で容量爆発する。

表示フィルタ (Wireshark 独自構文) #

取り込み後、表示時にだけフィルタする。プロトコル名.フィールド名 = 値 の形で、3,000 種類のプロトコルすべてのフィールドが条件にできる。

表示フィルタ — Wireshark 構文
# HTTP GET のみ http.request.method == "GET"

# 5xx エラー応答のみ http.response.code >= 500

# TCP 再送だけ抽出 (障害解析の定番) tcp.analysis.retransmission

# DNS で example.com を含むクエリ dns.qry.name contains "example.com"

# TLS の Client Hello tls.handshake.type == 1

# 複合条件 ip.src == 10.0.0.5 and tcp.dstport == 443 and tls.handshake

▸ フィールド名は GUI から拾える

パケット詳細ペインで気になるフィールドを右クリック → 「Apply as Filter」で正しい構文が自動入力される。3,000 種類のフィールド名を暗記する必要はない。

便利な表示フィルタの例 #

用途 フィルタ
障害切り分け (TCP リセット) tcp.flags.reset == 1
帯域食いの抽出 frame.len > 1400
ARP スプーフィング検出 arp.duplicate-address-detected
DNS 応答だけ dns.flags.response == 1
TLS のサーバ証明書 tls.handshake.type == 11
HTTP の Host ヘッダ http.host contains "victim.example"
SMB 認証失敗 smb.nt_status == 0xc000006d
マルウェアの C2 候補 (User-Agent 異常) http.user_agent contains "Mozilla/4.0"
04

典型的な使い方 #

TCP フローの追跡 #

「右クリック → Follow → TCP Stream」で 1 セッション分の通信を復元してテキスト表示できる。HTTP リクエスト/レスポンスや SMTP 会話を「画面で読む」感覚で見られる。Wireshark 入門者が最初に感動する機能。

統計 #

Statistics メニューに次のような分析機能がある:

  • Conversations — どのホストペアがどれだけ通信しているか
  • Endpoints — ホスト別のパケット数/バイト数
  • I/O Graphs — 時系列のスループット (Mbps) グラフ
  • Flow Graph — 2 ホスト間の通信を縦軸時間の Sequence Diagram で表示
  • HTTP Object List — キャプチャされた全 HTTP オブジェクトをファイルとして抽出 (画像、JS、JSON 全部取り出せる)
  • TCP Stream Graphs — RTT、ウィンドウサイズ、シーケンス番号の時系列を可視化

ファイル抽出 #

File → Export Objects → HTTP で、キャプチャ中に流れた全 HTTP オブジェクト (HTML / JS / 画像 / ダウンロードファイル) をローカルに書き出せる。マルウェア解析で「ペイロードのバイナリだけ抜き出す」用途や、社内検証で「実際にダウンロードされたファイル」を確保する用途に頻用される。

TLS 復号 #

TLS は通常暗号化されて中身が見えないが、鍵交換のセッションキーを把握できれば復号して表示できる

方法 適用範囲
SSLKEYLOGFILE 環境変数 Chrome / Firefox / curl / Node.js などが書き出す TLS セッションキーのログ。Wireshark の Preferences で読ませる
RSA 鍵 サーバの秘密鍵を持っていて、かつ RSA 鍵交換 (TLS 1.2 まで) を使っている場合のみ
TLS 1.3 + PFS RSA 鍵だけでは復号不可。SSLKEYLOGFILE が必須

自分のブラウザ通信を解析する用途では SSLKEYLOGFILE がほぼ唯一の現実解。

Chrome の TLS を復号する手順
# 1. 環境変数を設定して Chrome を起動 $ export SSLKEYLOGFILE=/tmp/tls.keys $ google-chrome

# 2. Wireshark の Preferences → Protocols → TLS で # "(Pre)-Master-Secret log filename" に /tmp/tls.keys を指定

# 3. これだけで TLS が復号されて HTTP 平文として表示される

05

tshark — コマンドライン版 #

GUI なしの tshark が同梱されており、サーバ上での無人キャプチャや CI でのパケット検証に使う。

tshark の基本
# インタフェース一覧 $ tshark -D

# eth0 で 60 秒キャプチャしてファイル保存 $ tshark -i eth0 -a duration:60 -w capture.pcapng

# HTTP の Host ヘッダだけ抜き出して JSON 出力 $ tshark -r capture.pcapng -Y 'http.request' -T json
-e ip.src -e http.host -e http.request.uri

# リングバッファで連続記録 (10MB x 5 ファイル) $ tshark -i eth0 -b filesize:10240 -b files:5 -w rotated.pcapng

フィルタ構文は GUI と完全互換で、フィルタを GUI で開発して tshark に持ち込むワークフローが現実的。

大規模環境では tcpdump + 後処理が定番 #

実運用では、長時間 / 多ホストのキャプチャは tcpdump -w で軽量に取り、後で Wireshark / tshark で解析する分業がベスト。Wireshark は GUI の重さで数十 GB のファイルを快適に開けない場面がある。

06

セキュリティでの活用 #

マルウェアの C2 通信解析 #

サンドボックスで検体を実行 → tcpdump でフル取得 → Wireshark で開き、HTTP の User-Agent / DNS クエリ / 接続先 IP / JSON ペイロードを目視で読む。IOC (Indicators of Compromise) を作る最も古典的な手順。

認証情報の傍受 #

平文プロトコル (HTTP Basic / FTP / Telnet / 旧 POP3) はクレデンシャルが平文で流れる。tcp.port == 21 でフィルタして "USER" "PASS" を読むだけで認証情報が取れる。**「だから TLS を使え」**を実感するには Wireshark で 1 回見るのが最速。

Kerberos / NTLM ハンドシェイクの解析 #

AD 攻撃のテスト時、Wireshark で AS-REQ / TGS-REQ / NTLM Type 1-3 メッセージを確認しながら KerberoastingPass-the-Hash が成功しているかを把握できる。kerberos.msg_typentlmssp のフィルタが使える。

スキャンの検出 #

tcp.flags.syn == 1 and tcp.flags.ack == 0 で SYN だけのパケットを抽出し、特定 IP から短時間に多数の宛先ポートに飛んでいるかを見れば SYN スキャンが分かる。statistics → conversations でも同じことが分かる。

ARP スプーフィングの検出 #

Wireshark は「同じ IP に複数 MAC が応答」を arp.duplicate-address-detected で自動検出してくれる。LAN 内 MITM の確認に有効。

07

限界 — Wireshark でできないこと #

▸ 「全てが見える」わけではない

Wireshark の名前を知ってる人ほど誤解しがちなので明示しておく。

限界 内容
暗号化ペイロード TLS / SSH / WireGuard / IPsec などは鍵がなければ中身は見えない。タイミング・サイズ・宛先しか分からない
スイッチ環境のクロストラフィック プロミスキャスでも届かない (前述の通り SPAN/TAP が必要)
超高速回線 10/40/100 GbE のフルラインレートを取り切るのは無理。専用ハードウェア (FPGA, DPDK ベースのプローブ) が要る
長期保管 フル GBE で 1 時間取ると数 GB。常時記録には不向き。Zeek / Suricata のような「メタデータだけ残す」NSM が補完
アラート 「異常があったら通知」は本質的に苦手。Suricata / Snort のような IDS と併用

関連ツールとの使い分け #

ツール 役割 Wireshark との関係
tcpdump 軽量な CLI キャプチャ Wireshark で読む元データを取る相棒
Zeek (旧 Bro) パケット → 構造化ログ変換 常時記録 + クエリ可能なログ化。conn.log, http.log, dns.log を出す
Suricata シグネチャベース IDS/IPS アラート発生時に Wireshark で深掘り解析
NetFlow / IPFIX フロー単位の集計 帯域・接続先の俯瞰用、中身は見えない
Brim (Zui) Zeek ログ + pcap の統合 GUI 大量 pcap の分析に Wireshark より速い

**「常時監視は Zeek/Suricata、ピンポイント解析は Wireshark」**が現代の標準構成。

08

法的・倫理的な注意 #

▸ 他人の通信の傍受は犯罪になり得る

日本では電気通信事業法 / 不正アクセス禁止法 / 刑法の通信の秘密に抵触し得る。自宅 LAN・自分の管理下のサーバ・自社のテスト環境・明示的に許可を得たペンテスト案件に限定する。カフェの Wi-Fi で他人の通信を取る・職場の同僚の通信を取るなどは刑事責任を問われる行為。

CTF や検証ラボ、自分のホスト発のトラフィック、自分の管理する仮想ネットワークなら問題ない。**「権限なく流れている通信を聞かない」**は鉄則。

09

まとめ — 学習者が押さえるポイント #

Wireshark は「目の前のネットワークで何が起きているか」を直接観測できる、ネットワーク学習者・エンジニア・セキュリティ専門家にとって最重要のツールの一つ。教科書で TCP/IP を読むより、Wireshark で自分の通信を 30 分眺める方が理解が早い、と言われるくらいの教育効果がある。

▸ 最初に身につける 5 項目
  • キャプチャフィルタと表示フィルタの違い (前者は BPF、後者は Wireshark 独自構文)
  • Follow TCP Stream で 1 セッションを読む流れ
  • Statistics → I/O Graphs / Conversations でマクロに見る
  • SSLKEYLOGFILE で TLS を復号する手順
  • 常時運用は Zeek / Suricata に任せ、Wireshark は深掘り用と認識する

「ネットワークが分からない」状態の人にとって、Wireshark でひとつのリクエストを生で見るのは根本的なブレークスルーになる。最初の 1 回を試すコストは無料で、それが一生の財産になる。