Wiresharkとは ― パケットキャプチャの見方
Wiresharkとは、
Wiresharkとは、通信の中身を一覧で見るソフト
Wiresharkは、ネットワークを流れるパケットを取得して、1つずつ詳しく表示する無料のソフトです。このように通信を記録して調べることを、パケットキャプチャと呼びます。
WiresharkはGPL(ソースコードの公開を条件とするライセンス)で公開されていて、Windows、macOS、UNIX系のOSで動きます。公式のユーザーガイドが挙げる用途は、障害調査、動作確認、プロトコルの学習などです。
Wiresharkは、パケットを観察して表示するだけのソフトで、パケットを送ったり、通信を書き換えたりはしません。不正な通信を検知して警告する侵入検知システムでもありません。
パケットの中身は、カプセル化で重ねたヘッダの順に表示されます。画面の見方と表示フィルタが分かれば、3ウェイハンドシェイクのような通信の流れを実際に確かめられます。
基本の使い方:キャプチャを始めて止めるまで
Wiresharkを起動すると、キャプチャできるネットワークインターフェース(有線LANや無線LANなど、PCの通信の出入口)の一覧が表示されます。記録したいインターフェースを選んで開始すると、パケット一覧に通信が並び始めます。
止めるときは、メニューの Capture から Stop を選ぶか、ツールバーの Stop ボタンを押します。ショートカットは Ctrl+E です。止めたあと、一覧のパケットを選んで詳細を調べます。
画面の3つの区画
Wiresharkの画面は、パケット一覧、パケット詳細、パケットバイト列の3つの区画に分かれています。一覧で1行を選ぶと、残りの2つの区画が、選んだパケットの内容に切り替わります。
パケット一覧には、取得した順に1行ずつ並びます。既定の列は、安定版の4.6系では次の7つです。
| 列 | 表示される |
|---|---|
| No. | パケットの番号。フィルタで絞っても変わらない |
| Time | パケットの時刻 |
| Source | 送信元のアドレス |
| Destination | 宛先のアドレス |
| Protocol | プロトコル名 |
| Length | パケットの長さ |
| Info | パケットの内容の要約 |
パケット詳細は、選んだパケットのヘッダを、プロトコルごとの木構造で表示します。Ethernet、IP、TCPなど、カプセル化で足されたヘッダが外側から順に並びます。欄を選ぶと、バイト列の中の該当する部分が強調されます。
パケット一覧の見方:Webページを開いたときの6パケット
次の一覧は、192.168.10.25のPCが、example.comのWebページを開いたときの最初の6パケットです。実機で取得したものではなく、説明用に作った値です。1行を押すと、そのパケットの詳細が開きます。
- 宛先MACアドレス
- ac:de:48:dd:ee:ff
- 送信元MACアドレス
- ac:de:48:00:11:22
- 上位のプロトコル
- IPv4
- 送信元IPアドレス
- 192.168.10.25
- 宛先IPアドレス
- 192.168.10.1
- 上位のプロトコル
- UDP
- TTL
- 64
- 送信元ポート
- 54321
- 宛先ポート
- 53
- 種類
- 問い合わせ
- 質問
- example.com のAレコード
- 宛先MACアドレス
- ac:de:48:00:11:22
- 送信元MACアドレス
- ac:de:48:dd:ee:ff
- 上位のプロトコル
- IPv4
- 送信元IPアドレス
- 192.168.10.1
- 宛先IPアドレス
- 192.168.10.25
- 上位のプロトコル
- UDP
- TTL
- 64
- 送信元ポート
- 53
- 宛先ポート
- 54321
- 種類
- 応答
- 質問
- example.com のAレコード
- 回答
- example.com は 203.0.113.50
- 宛先MACアドレス
- ac:de:48:dd:ee:ff
- 送信元MACアドレス
- ac:de:48:00:11:22
- 上位のプロトコル
- IPv4
- 送信元IPアドレス
- 192.168.10.25
- 宛先IPアドレス
- 203.0.113.50
- 上位のプロトコル
- TCP
- TTL
- 64
- 送信元ポート
- 52310
- 宛先ポート
- 80
- フラグ
- SYN
- 宛先MACアドレス
- ac:de:48:00:11:22
- 送信元MACアドレス
- ac:de:48:dd:ee:ff
- 上位のプロトコル
- IPv4
- 送信元IPアドレス
- 203.0.113.50
- 宛先IPアドレス
- 192.168.10.25
- 上位のプロトコル
- TCP
- TTL
- 56
- 送信元ポート
- 80
- 宛先ポート
- 52310
- フラグ
- SYN, ACK
- 宛先MACアドレス
- ac:de:48:dd:ee:ff
- 送信元MACアドレス
- ac:de:48:00:11:22
- 上位のプロトコル
- IPv4
- 送信元IPアドレス
- 192.168.10.25
- 宛先IPアドレス
- 203.0.113.50
- 上位のプロトコル
- TCP
- TTL
- 64
- 送信元ポート
- 52310
- 宛先ポート
- 80
- フラグ
- ACK
- 宛先MACアドレス
- ac:de:48:dd:ee:ff
- 送信元MACアドレス
- ac:de:48:00:11:22
- 上位のプロトコル
- IPv4
- 送信元IPアドレス
- 192.168.10.25
- 宛先IPアドレス
- 203.0.113.50
- 上位のプロトコル
- TCP
- TTL
- 64
- 送信元ポート
- 52310
- 宛先ポート
- 80
- フラグ
- PSH, ACK
- 要求行
- GET / HTTP/1.1
- Host
- example.com
パケット1と2は、DNSの問い合わせと応答です。PCは、example.comのIPアドレスを、ゲートウェイの192.168.10.1に問い合わせます。応答の回答欄に、名前解決の結果である203.0.113.50が入っています。
パケット3から5は3ウェイハンドシェイクで、フラグの欄がSYN、SYNとACK、ACKの順に変わります。データを送り始めるのは、パケット6のGETからです。
詳細を見比べると、カプセル化の仕組みを確かめられます。パケット3の宛先IPアドレスは203.0.113.50ですが、宛先MACアドレスはルータのものです。MACアドレスは次に渡す相手を、IPアドレスは最終的な相手を指すからです。パケット4は、送信元IPアドレスがWebサーバで、送信元MACアドレスはルータになっています。
表示フィルタで見たいパケットだけに絞る
実際のキャプチャでは、一覧に大量のパケットが並びます。画面上部の入力欄に表示フィルタを入力すると、条件に合うパケットだけが一覧に残ります。
| 書き方 | 絞れる |
|---|---|
| tcp | TCPのパケットだけ |
| dns | DNSのパケットだけ |
| http.request | HTTPの要求だけ |
| ip.addr == 203.0.113.50 | 送信元か宛先が203.0.113.50のパケット |
| tcp.port == 80 | 送信元か宛先のポートが80のパケット |
| tcp.flags.syn == 1 | SYNフラグが立っているパケット |
| dns.qry.name contains "example" | 問い合わせた名前に example を含むDNSのパケット |
| ip.addr == 203.0.113.50 and tcp.port == 80 | 2つの条件を両方満たすパケット |
フィルタは、プロトコル名か、プロトコル名に欄の名前をつないだ形で書きます。比較には ==、!=、contains などを使い、複数の条件は and や or でつなぎます。たとえば、上の疑似パケット一覧に ip.addr == 203.0.113.50 を適用すると、DNSの2行が消えて、サーバとのやりとりだけが残ります。
Wiresharkには、キャプチャフィルタという別のフィルタもあります。こちらは記録を始める前に指定し、条件に合う通信だけを記録します。
キャプチャフィルタは、tcp port 80 and host 203.0.113.50 のように、表示フィルタとは別の文法で書きます。迷ったら、まずすべて記録して、表示フィルタで絞りましょう。
HTTPSの中身が読めない理由
HTTPSの通信を自分のPCでキャプチャしても、そのままではHTTPの要求や応答の中身は読めません。TLSがHTTPのデータを暗号化してから送るからです。
TCPの上でTLSを使う場合、暗号化されるのはTCPの上で運ぶデータで、Ethernet、IP、TCPのヘッダは暗号化されません。そのため、アドレスとポート番号はHTTPSでも一覧に表示されます。
暗号化していないDNSの問い合わせは、上の疑似パケット一覧のパケット1のように、問い合わせた名前まで読めます。暗号化の有無でキャプチャの内容がどう変わるかを比べると、暗号化の意味がよく分かります。
キャプチャしてよい通信
キャプチャしてよいのは、自分のPCの通信と、管理者から許可された環境の通信だけです。他人の通信を許可なく記録してはいけません。
職場や学校のネットワークでは、事前に管理者へ確認します。暗号化されていない通信を記録すると、メールやWebの内容がそのまま残るので、保存した記録の扱いにも注意が必要です。
通信の不調を調べるだけなら、まずpingとtracerouteやnetstat・ss・digなどのコマンドで足ります。それで原因を絞り込めないときに、Wiresharkでパケットを1つずつ確かめます。
練習問題(全5問)
正解:ネットワークを
Wiresharkは、
正解:パケット詳細
パケット詳細は、
正解:ip.addr == 203.0.113.50
ip.addr は、
正解:キャプチャフィルタは
キャプチャフィルタに
正解:IPアドレスや
TLSが
選んでから「採点する」を押すと、解説つきで答え合わせができます。
参考にした資料
- Wireshark User's Guide(Wiresharkの概要、画面の区画、表示フィルタ、キャプチャフィルタ)
- Wireshark Display Filter Reference(ip.addr、tcp.port、tcp.flags.syn、dns.qry.name などの欄の名前)
関連記事
おすすめの本 PR
ネットワークを初めて学ぶ人向けの入門書です。
![『[改訂新版]3分間ネットワーク基礎講座』の表紙](https://m.media-amazon.com/images/P/4774143731.09.MZZZZZZZ.jpg)
