Wireshark は、ネットワーク上を流れるパケットをそのまま捕まえて中身を解読する、世界で最も広く使われるパケットキャプチャ/解析ツール。1998 年に Gerald Combs 氏が Ethereal として開発を始め、2006 年に商標問題で Wireshark に改名された OSS。現在は 3,000 以上のプロトコルをデコードでき、ネットワーク障害切り分け・セキュリティ調査・プロトコル学習・マルウェア解析の事実上の標準になっている。本稿では libpcap/Npcap によるキャプチャの仕組み / 表示フィルタと統計機能 / TCP・TLS の追跡例 / tshark CLI / 限界 (暗号化ペイロード) と関連ツール (tcpdump / Zeek / Suricata) との使い分けまで扱う。
Wireshark とは何か — パケットを「見る」ツール #
通常、ネットワークは「アプリ → OS → NIC → 線」と動いて見えないが、Wireshark は NIC を流れる全パケット (自分宛/自分発以外も含む) を OS のフック越しに取り込んで、レイヤごとにデコードして表示する。
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) でも事実上の前提知識として扱われる。
仕組み — libpcap と Npcap #
Wireshark 自体は「表示と解析の GUI」であり、パケット取得は libpcap (Linux/macOS) または Npcap (Windows) という別ライブラリが担当する。
スイッチ環境では「自分の通信しか見えない」 #
現代の Ethernet はハブではなくスイッチが基本で、スイッチは宛先 MAC のポートにしかフレームを送らない。プロミスキャスモードにしても、自分宛/自分発以外のパケットは届かない。これを乗り越えるには:
- ポートミラーリング (SPAN ポート) — スイッチ管理画面で「ポート 3 の全通信をポート 5 にもコピーして」と設定。Wireshark をポート 5 に挿す
- TAP デバイス — 物理的にラインに割り込んで分岐させる装置 (ProfiTAP, Garland 等)
- ホスト上で直接キャプチャ — そのホストの NIC のループ箇所を捕る (自分自身の通信は確実に見える)
- ARP スプーフィング — 別ホストの通信を自分のポートに流させる (攻撃寄りで通常運用では使わない)
- Wi-Fi モニタモード — Wi-Fi なら無線フレーム全体を傍受可能 (ただし WPA2 以降は暗号化される)
フィルタ — キャプチャフィルタと表示フィルタ #
Wireshark の最重要機能。フィルタは 2 種類あり、書き方が違う ので注意。
キャプチャフィルタ (BPF syntax) #
カーネル内でパケットを「取り込む前に」落とすフィルタ。書き方は tcpdump と同じ 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 種類のプロトコルすべてのフィールドが条件にできる。
# 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
パケット詳細ペインで気になるフィールドを右クリック → 「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" |
典型的な使い方 #
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 がほぼ唯一の現実解。
# 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 平文として表示される
tshark — コマンドライン版 #
GUI なしの tshark が同梱されており、サーバ上での無人キャプチャや CI でのパケット検証に使う。
# インタフェース一覧
$ 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 のファイルを快適に開けない場面がある。
セキュリティでの活用 #
マルウェアの 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 メッセージを確認しながら Kerberoasting や Pass-the-Hash が成功しているかを把握できる。kerberos.msg_type や ntlmssp のフィルタが使える。
スキャンの検出 #
tcp.flags.syn == 1 and tcp.flags.ack == 0 で SYN だけのパケットを抽出し、特定 IP から短時間に多数の宛先ポートに飛んでいるかを見れば SYN スキャンが分かる。statistics → conversations でも同じことが分かる。
ARP スプーフィングの検出 #
Wireshark は「同じ IP に複数 MAC が応答」を arp.duplicate-address-detected で自動検出してくれる。LAN 内 MITM の確認に有効。
限界 — 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」**が現代の標準構成。
法的・倫理的な注意 #
日本では電気通信事業法 / 不正アクセス禁止法 / 刑法の通信の秘密に抵触し得る。自宅 LAN・自分の管理下のサーバ・自社のテスト環境・明示的に許可を得たペンテスト案件に限定する。カフェの Wi-Fi で他人の通信を取る・職場の同僚の通信を取るなどは刑事責任を問われる行為。
CTF や検証ラボ、自分のホスト発のトラフィック、自分の管理する仮想ネットワークなら問題ない。**「権限なく流れている通信を聞かない」**は鉄則。
まとめ — 学習者が押さえるポイント #
Wireshark は「目の前のネットワークで何が起きているか」を直接観測できる、ネットワーク学習者・エンジニア・セキュリティ専門家にとって最重要のツールの一つ。教科書で TCP/IP を読むより、Wireshark で自分の通信を 30 分眺める方が理解が早い、と言われるくらいの教育効果がある。
- キャプチャフィルタと表示フィルタの違い (前者は BPF、後者は Wireshark 独自構文)
- Follow TCP Stream で 1 セッションを読む流れ
- Statistics → I/O Graphs / Conversations でマクロに見る
SSLKEYLOGFILEで TLS を復号する手順- 常時運用は Zeek / Suricata に任せ、Wireshark は深掘り用と認識する
「ネットワークが分からない」状態の人にとって、Wireshark でひとつのリクエストを生で見るのは根本的なブレークスルーになる。最初の 1 回を試すコストは無料で、それが一生の財産になる。