パケットキャプチャツール「Wireshark」の使い方(後編)
〜表示のカスタマイズとフィルターの設定〜

前編ではWireshark、リピーター機能搭載ハブの紹介などをしました。後編では実際にWiresharkを実行、フィルターを利用して必要なパケットをキャプチャする方法などを紹介します。

■ Wiresharkを使いやすくする

最初におすすめしたいのは表示のカスタマイズ。まずは時間の設定を変更してみましょう。デフォルトでは「キャプチャ開始からの秒数」になっています。このほうが解析する際にわかりやすいこともありますが、パケットをキャプチャした日時にしたほうが解析しやすいケースもあります。[表示]→[時刻表示形式]→[日時]として、おくと便利でしょう。
時間表示を「日時形式」にすると分かりやすくなります

■ 事前に機器のIPアドレスを調べておく

Wiresharkを利用するにあたって、ネットワークにつながれた機器のIPアドレスや機器固有のMACアドレスも分かっているとより便利です。
IPアドレスと機器の対照を知る方法は、ルータの設定画面から子機情報などで確認する方法がありますし、別途、ネットワークのスキャンソフトを利用して一覧を作る方法などがあります。ここでは「Advanced IP Scanner」というスキャンソフトを利用してみましょう。
「Advanced IP Scanner」でネットワーク内の機器の一覧を作ることができます
なお、インターネット方向のサーバーのIPアドレスはコマンドプロンプトからnslookupで名前を調べることができますが、Wiresharkでもそのまま名前で表示することができます。デフォルトではIPアドレス表示ですが[表示]→[名前解決]→[ネットワークアドレスを解決]にチェックを入れることでIPアドレスに変えてサーバー名を表示することもできます。
名前を解決させて表示することもできます

■ キャプチャしたデータの保存

Wiresharkでキャプチャ実行中に赤い四角をクリックしてキャプチャを終了し解析を始めることができます。データを保存したければ、[ファイル]→[保存]でファイル名を指定します。保存したファイルの拡張子は「.pcapng」と長いものになります。
キャプチャを終了したあと、再びキャプチャを開始する際、データを保存しなければキャプチャしたデータは破棄されて新たにキャプチャを開始することになります。
保存したファイルはWiresharkで開くことで、キャプチャ直後と同じ内容を表示できます。その際、後述のフィルターをかけてパケットの解析をすることが可能です。

■ 膨大なデータから必要な情報を表示させる

Wiresharkは膨大な量のパケットをキャプチャできます。その中からフィルターを利用して必要なパケットを表示することが可能です。Wiresharkには2つのフィルターがあり、キャプチャしたデータをもとに表示するフィルターと、キャプチャのデータを収集するときのフィルターです。
パケット表示エリアの上の表示フィルターにコマンドを入力すれば、必要なものを絞り込んで表示できます。たとえば[192.168.101.36]のIPアドレスが割り振られた機器の送信と受信をモニターしたいのなら、
ip.addr==192.168.101.36
と入れると、キャプチャしたデータから、[192.168.101.36]の送受信のデータが表示されます。
指定した機器[192.168.101.36]だけのデータが表示されます
表示フィルターの左のアイコンをクリックすると、例文がプルダウン表示されるので選択してフィルターをかけることができます。
矢印のアイコンをクリックするとフィルターの例文が表示されます
また、表示フィルターに文字を入力すると、関連した候補が表示されるので選択してフィルターをかけることができます。
表示フィルターに文字を入力すると、関連した候補が表示されます

■ フィルターの様々な機能

フィルターには様々な機能があります。特定のデバイスの通信を確認するならIPアドレス、TCP、UDPなどのプロトコル。機器を指定する場合にも範囲の指定や複数条件の一致など、様々な設定方法が用意されています。たとえば、「DNS」と指定すれば、DNSへのIPアドレス等の問い合わせと返答を表示させることができます。
表示フィルターでDNSを表示。アクセス先とのやり取りが確認できます
代表的な表示フィルターを以下に示します。
tcp TCPプロトコル
udp UDPプロトコル
dns DNSへのIPアドレス等の問い合わせと返答
icmp ICMPプロトコルを表示
http TCPのなかのHTTPプロトコルを表示
ip IPv4のパケットを表示
ip.addr == 192.0.2.1 送信元または送信先のIPアドレスが192.0.2.1のものを表示
ipv6 IPv6のパケットを表示
ipv6.addr == 2001:db8::1 IPv6で送信元または送信先のIPアドレスが2001:db8::1のものを表示
また、フィルターを論理積(AND)、論理和(OR)、排他的論理和(XOR)、論理否定(NOT)といった論理結合をすることができます。
AND結合 and または &&
OR結合 or または ||
XOR結合 xor または ^^
NOT結合 not または !
例:192.0.2.1に関連するTCPプロトコルのみ表示
tcp && ip.addr == 192.0.2.1
また、パケットの状態によって色分けすることもできます。デフォルトで多くの設定がされていますので、インストールしたまま使うことができますし、自分で変更することも可能です。通常よく使うパケットは薄い色で、なんらかの注意が必要な場合は濃い色になっています。
条件によって、色の濃さを変えて表示されます
色のルールは設定できます

■ キャプチャデータ収集時のフィルター

Wiresharkは膨大なデータを収集できます。表示フィルターはその中から必要なデータを抽出できます。ただし、長期間のキャプチャを行うとデータ量が非常に大きくなってしまいます。そこでデータ量を抑えるためキャプチャのデータ収集時にフィルターをかけることもできます。例えば特定のIPアドレスのデバイスの通信情報を収集するなら、キャプチャのデータ収集時にIPアドレスによるフィルターをかけます。
起動時にキャプチャする回線を選ぶ際にフィルターを設定します。[192.168.101.36]のデータだけ収集するならば、host 192.168.101.36と指定します。
キャプチャ開始時にフィルターを設定すればデータ量の節約になります
WiresharkはIPv4だけでなくIPv6にも対応し、IPv6パケットも表示されます。このようにIPv4アドレスを指定してフィルターをかけると、IPv4のパケットだけしか表示されません。IPv6もIPv4も流れる状況ですと肝心なパケットを見逃してしまう恐れもあります。IPv6で通信する必要性がないのなら、ネットワークでIPv6を使えないようにルーティングをオフしておくと、確実にデータを取ることができます。
キャプチャフィルタは表示フィルターと式は似ていますが、異なっている部分もあります。例えばDNSは指定できない、IPv6の式はipv6がip6であるなど間違えやすい微妙な違いとなっていますので注意しましょう。
代表的な表示キャプチャフィルタを以下に示します。
tcp TCPプロトコル
udp UDPプロトコル
icmp ICMPプロトコルを表示
port 53 送信元と送信先のポート番号が53のものを表示
ip IPv4のパケットを表示
host 192.0.2.1 送信元または送信先のIPアドレスが192.0.2.1のものを表示
dst host 192.0.2.1 送信先のIPアドレスが192.0.2.1を表示
src host 192.0.2.1 送信元のIPアドレスが192.0.2.1を表示
ip6 IPv6のパケットを表示
なお、キャプチャフィルタの設定例は[キャプチャ]→[キャプチャフィルタ]から確認できます。
キャプチャフィルタの設定例は[キャプチャ]→[キャプチャフィルタ]から確認できます

■ キャプチャしたデータを詳しく見ていく

キャプチャした通信内容を見てみましょう。Webサイトにアクセスする際に必要な情報は、ARPによってMACアドレスとIPアドレスの対比を認識したうえで、DNSへ名前に対するIPアドレスを問い合わせたうえで通信する仕組みとなっています。
ARPによってMACアドレスとIPアドレスの対比することは、機器によってはかなり頻繁に行われています。「Who has<IPアドレス>」=<IPアドレス>のIPアドレスを持っている機器はどれ? というARPリクエストをネットワークに投げかけ、そのIPアドレスの機器は自分のMACアドレスはxx:xx:xx:xx:xx:xxです、と返答します。
ARPパケットを抜き出して表示させたところ。ルータや各機器がパケットを出しあっています
DNS(Domain Name System)は、その名のとおりドメイン名(=○○.co.jpなど)をIPアドレスに変換してくれるシステムです。通常はルータにDNSの代理サーバー機能がありますので、ネットワーク上の各機器からDNSの問い合わせはルータに向かいます。
様々なサーバーのIPアドレス照会を行っています。例えばWebページを1ページ表示させただけでも、広告や画像などが別サーバーになっていれば、その分もDNSに問い合わせます
通信するサーバーが決まると実際にサーバーにリクエストをしてデータが流れてきます。ポート443で暗号化してWebのデータが流れ、そのほかにも暗号化された通信が行われています。
実際にWebサーバーからページのデータを取得しています
各パケットをクリック・選択すると下のウインドウに詳細と16進数が表示されます。詳細の欄は畳んで表示され、左側の「>」をクリックするとさらに詳細が表示されます。Wiresharkのウインドウ内にも表示されますが、パケットの行をダブルクリックすると別ウインドウで表示されます。
畳まれた項目の2つめの「>」をクリックして詳細を表示するとパケットの送信元と送信先のMACアドレス、3つめはIPアドレスなどのパケットの情報が入っています。さらに項目をマウスで選択すると、該当の16進数部分が反転して表示されますので、16進数のパケットのどの部分がどの内容なのかも分かります。
別ウインドウで表示させたパケットの詳細情報

■ Wiresharkの実際の使用例

実使用例としてプラネックスの開発者がWiresharkを利用して「どこでも人感センサー」の動作試験を行ったときの画面を紹介しましょう。「どこでも人感センサー」は人体を検知すると即座にサーバーへ通知を行います。
この動作を確認するためにパケットキャプチャツールWiresharkで状況を監視しつつ、人感センサーに人体を検知させ、検知と同時にサーバーに通知が行われるかを試験します。画面のパケットNo.472~481がサーバーとの通信になります。
今回は膨大なWiresharkの機能のほんの一部を紹介しました。ネットワークエンジニアの人が本格的に利用するならリピーター機能搭載ハブの併用が便利だと思われますが、初めてWiresharkを使う人はインストールしたPCがどんな通信を行っているかを知るだけでも様々な発見があると思います。
もう少し範囲を広げて自分のスマートフォンアプリがどこと通信をしているかを知りたいときは、WiresharkをインストールしたPCのテザリング機能(Windowsであればモバイルホットスポット)にスマートフォンをつなぐと、スマートフォンのパケットをキャプチャすることが可能です。
前編でお伝えしたようにWiresharkは多くの解説本が出版されるほど人気が高く奥が深いツールです。興味のある人はこれを機会に深掘りされることをお勧めします。

ネットワークをもっと快適に

関連製品