ネットワークのトラブル解析などに利用できるネットワークアナライザー「Wireshark」の使い方

 PCがネットにつながらない、通信速度がなぜか遅い、などといったトラブルは、誰しも経験したことがあるはずだ。しかし、その正確な原因を知るのは容易ではない。ハードウェアの故障や接続ミス、ソフトの設定ミスやバグ、ウイルスや外部からの攻撃など、様々な要因が複合的に絡み合っているためだ。今回紹介するのは、そのようなトラブルの究明に役立つ強力なネットワークプロトコルアナライザー「Wireshark である。

 ネットワークプロトコルアナライザーは「パケットキャプチャ」や「スニファ」とも呼ばれ、LANケーブル内を流れる生のデータ(パケット)をキャプチャして解析するためのツールだ。PCやサーバが行っている通信をすべて可視化できるため、問題点を見つけるにはもってこいといえる。

 商用無償を問わずネットワークプロトコルアナライザーはいくつもあるが、中でもWiresharkは使いやすいGUI、OSを選ばないクロスプラットフォーム、850を超す膨大な対応プロトコルから世界中の技術者に愛用され、業界標準とされているツールだ。単なるトラブルシュート以外にネットワークの構築、運用、管理、セキュリティの維持、ネットワークアプリケーションの開発やデバッグに欠かせない存在となっている。以前は「Ethereal」という名前で呼ばれていたが、数年前に商標問題から改称し、現在も精力的に開発が続けられている。

 自動解析をするツールではないので、解析には各種プロトコルの基礎的な知識が必要とされるが、大規模なネットワークのみならず家庭内LANのような小規模なネットワークを管理する際にも心強い味方になるだろう。なお、パケットのキャプチャは不正な使用につながる危険性もあるため、管理者によって禁止されている場合がある。Wiresharkを使用する際には注意されたい(図1)。

図1 Wiresharkは生のパケットをキャプチャして解析できる
図1 Wiresharkは生のパケットをキャプチャして解析できる

Wiresharkのインストール

 WiresharkはSourceForge.JPのダウンロードページから入手できる。Windows上で利用する場合は、Windowsのマークとともに「DL」と書かれたリンクをクリックし、インストーラをダウンロードすればよい。64ビット版Windows、Mac、Linuxで利用する場合は下部の「その他全ファイル」から該当するファイルをダウンロードしよう(図2)。

図2 「DL」と書かれたリンクをクリックするとインストーラをダウンロードできる
図2 「DL」と書かれたリンクをクリックするとインストーラをダウンロードできる

 ダウンロードしたインストーラを実行してインストールを行う。インストーラは標準的なウィザード形式なので、画面の指示に従って「Next」をクリックしていけばよい(図3)。

図3 インストールは「Next」をクリックしていくだけなので簡単だ
図3 インストールは「Next」をクリックしていくだけなので簡単だ

 インストールを進めていくと、途中で「WinPcap」のインストーラが自動的に起動し、ウィザードが表示される。WinPcapはWindowsに低レベルのネットワークアクセス機能を提供するドライバで、Wiresharkの動作には欠かせない。「Next」をクリックして、Wireshark本体と同様にインストールを行おう(図4)。

図4 WinPcapのインストーラが表示されたら「Next」をクリックしてインストールしよう
図4 WinPcapのインストーラが表示されたら「Next」をクリックしてインストールしよう

 Wiresharkを利用する際には、インストールの手順だけではなく、どのマシンにインストールするかも重要なポイントとなる。スイッチングハブとルータで構成される一般的なネットワークの場合、Wiresharkでキャプチャできるのは、インストールしたマシンから送信されるパケットか、インストールしたマシン宛てのパケットのみだ。従って、基本的には問題が発生しているPC/サーバにWiresharkを直接インストールすればよい。特定のPCがネットにつながらないならそのPCに、ネットワーク全体でメールが届かないならメールサーバにインストールしよう。しかし、たとえば問題のマシンに高い負荷がかかっている場合や、マルウェアに侵入されている場合は、パケットを正常にキャプチャできない恐れがある。このようなときは別のマシンにWiresharkをインストールし、スイッチングハブのポートミラーリング(SPAN)機能を使うとよい。また、Wiresharkをインストールしたマシンと問題のマシンをリピータハブでネットワークに接続することでもキャプチャ可能だ(写真1)。

写真1 ポートミラーリングの有無やコマンドは機種によって異なるのでここでは割愛する。リピータハブはアライドテレシスなどから現行品として販売されている。
写真1 ポートミラーリングの有無やコマンドは機種によって異なるのでここでは割愛する。リピータハブはアライドテレシスなどから現行品として販売されている。

Wiresharkでパケットをキャプチャする

 Wiresharkを起動すると、図5のような初期画面が表示される。パケットをキャプチャするには、左上にある「Capture」の「Start capture on interface」以下に表示されているネットワークインターフェース(LANカード)一覧から、キャプチャしたいインタフェースを選んでクリックしよう。

図5 「Start capture on interface」からインターフェース名をクリックすればキャプチャを行える
図5 「Start capture on interface」からインターフェース名をクリックすればキャプチャを行える

 どのインターフェースが目的のものか分からない場合は、初期画面で「Interface List」をクリックし、インターフェース選択ダイアログを表示する。このダイアログを開いている状態で通信を行うと、通信に使われたインターフェースの「Packets」が加算される。キャプチャすべきインターフェースが分かったら、インターフェース名の右側にある「Start」をクリックすれば、キャプチャを開始できる(図6)。

図6 「Packets」が増加しているインターフェースの「Start」をクリックすればキャプチャできる
図6 「Packets」が増加しているインターフェースの「Start」をクリックすればキャプチャできる

 無線LANによる通信の場合、単にインターフェースを選ぶだけではキャプチャが行えない。無線LANのキャプチャをするときは初期画面で「Capture Options」をクリックし、インターフェースの設定画面を表示する。画面中程にある「Capture packets in promiscuous mode」のチェックを外し、プロミスキャスモードを無効にしよう(図7)。プロミスキャスモードはネットワークの盗聴にも使われるため、管理者によって使用を制限されている場合もある。このようなときも、設定を無効にするとよい。なお、WindowsのWiresharkでは無線LAN特有のパケット、たとえばWEPキーのやりとりなどをキャプチャすることは不可能だ。また、ほかのマシンによる無線LANの通信をキャプチャすることもできない。どうしてもキャプチャしたい場合は「モニターモード」に対応した無線LANカードを用意した上で、LinuxのWiresharkから行う必要がある。

図7 場合によってはプロミスキャスモードを無効にしてから「Start」をクリックしてキャプチャしよう
図7 場合によってはプロミスキャスモードを無効にしてから「Start」をクリックしてキャプチャしよう

 キャプチャを開始すると初期画面が図8のようなキャプチャ画面に切り替わる。同時にキャプチャされたパケットがカラフルに色分けされてリアルタイムで表示されていく。キャプチャ画面は3ペインに分かれており、上の「Packet List」ペインにはパケットがキャプチャされた時間、送信元と送信先のIPアドレス、パケットのプロトコル、パケットの簡易情報が表示される。中央の「Packet details」ペインには、Packet Listペインで選択したパケットの詳細がツリー形式で表示される。初期状態だとツリーは折りたたまれているが、「+」をクリックして展開するとすべての情報を確認できる。解析を行う際には特に重要となるペインだ。下の「Packet Bytes」ペインではPacket Listペインで選んだパケットが16進ダンプで表示される(図8)。

図8 Packet Listペインでパケットを選択し、Packet detailsペインで詳細をチェックするのが解析の基本になる
図8 Packet Listペインでパケットを選択し、Packet detailsペインで詳細をチェックするのが解析の基本になる

 パケットが十分に集まったら、ツールバーの左から4つめにあるボタンをクリックするか、メニューバーの「Capture」−「Stop」を選択して、キャプチャを停止しよう。(図9)。あとは表示されているパケットの中から、エラーが発生しているパケットや不審な動作をしているパケットを見つけて問題点を洗いだせばよい。

図9 このボタンをクリックすればキャプチャを停止できる。
図9 このボタンをクリックすればキャプチャを停止できる。

 表示されるパケットが多すぎて解析の邪魔になるときは、ディスプレイフィルタ機能で必要なパケットだけに絞り込むのがおすすめだ。フィルタはキャプチャ画面上部のコンボボックスに文字列を入力することで使用できる。特定のプロトコルだけを表示したい場合は「http」「udp」のようにプロトコル名を入力し「Enter」キーを押下する。IPアドレスで絞り込みたい場合は「ip.addr == 192.168.0.1」のように入力して「Enter」キーを押そう。フィルタは途中まで入力すると自動補完される。また、フィルタを解除したいときは「Clear」をクリックすればよい(図10)。

図10 コンボボックスにIPアドレスなどを入力して表示を絞り込める
図10 コンボボックスにIPアドレスなどを入力して表示を絞り込める

 ディスプレイフィルタの構文が分からない場合は、コンボボックスの左にある「Filter:」をクリックしよう。サンプルが一覧表示されるので、必要なものを選んでから「OK」をクリックすればフィルタを適用可能だ(図11)。

図11 フィルタのサンプルは、選んで「OK」をクリックするだけで利用できる
図11 フィルタのサンプルは、選んで「OK」をクリックするだけで利用できる

 コンボボックスの右にある「Expression…」をクリックするとWiresharkが対応しているプロトコルが大量に表示される。プロトコルを選択してから値と式を指定することで、独自のフィルタを定義しておくことができる(図12)。

図12 プロトコルに応じたフィルタを独自に作成できる
図12 プロトコルに応じたフィルタを独自に作成できる

 ツールバーのフロッピーのアイコンをクリックするか、メニューバーの「File」−「Save」を選択すると、キャプチャしたパケットをファイルとして保存できる(図13)。保存しておくと解析作業をほかのマシンで行えるほか、たとえばSnortのような侵入検知システム(IDS)に読み込ませることで、正常な通信なのか攻撃なのか判断することもできる。なお、保存したファイルはWiresharkの初期画面から「Open」をクリックするか、メニューバーの「File」−「Open」を選択することで読み込める。

図13 キャプチャしたパケットは全部保存するか一部保存するかを選択可能だ
図13 キャプチャしたパケットは全部保存するか一部保存するかを選択可能だ

Wiresharkの強力な解析補助機能を使う

 Wiresharkでキャプチャしたパケットは、そのままだとデータの断片だ。フィルタをかけてもパケットを1つずつ確認していくのは手間がかかる。そこで使いたいのが「Follow TCP Stream」機能だ。この機能は1つの通信セッションで行われる複数パケットのやりとりを結合し、ヘッダを取り去って1画面で表示してくれる。送受信で色分けもされるのでとても見やすく、解析の効率が上がるだろう。使用するには任意のパケットを選んで右クリックし、コンテキストメニューから「Follo TCP Stream」を選択しよう。通信がTCP以外の場合は、「Follow UDP Stream」「Follow SSL Stream」を選択すればよい(図14、15)。

図14 Follo TCP Stream機能はパケットの右クリックから利用できる
図14 Follo TCP Stream機能はパケットの右クリックから利用できる
図15 クライアントサーバ間のやりとりが、ヘッダを除去されて表示される。ここではメールサーバのログインを表示している
図15 クライアントサーバ間のやりとりが、ヘッダを除去されて表示される。ここではメールサーバのログインを表示している

 ネットワークの使用帯域を調査したいときは、パケットをキャプチャしてからメニューバーの「Statistics」−「IO Graphs」を選択しよう。パケットの転送量がグラフで表示される。デフォルトでは全パケットのグラフが表示されているが、「Filter」にプロトコルやポート番号などを入力することで特定のパケットだけをグラフ表示できる。「Graph2」や「Graph3」をクリックしてから右側のフィルタ欄にフィルタを入力すれば、複数の折れ線グラフを重ねて表示可能だ。プロトコル別の通信量を比較するときなどに便利だろう。「Save」をクリックしてグラフを画像として保存することも可能だ(図16)。

図16 「IO Graphs」機能でパケットの転送量をグラフにできる
図16 「IO Graphs」機能でパケットの転送量をグラフにできる

 メニューバーの「Statistics」−「Conversations」を選択すると「Conversations」ダイアログが表示される。この画面では、どのマシンとどのマシンのやりとりが最も活発だったかをパケット数、バイト数によって調べられる。やりとりを選択して右クリックすると、そのマシン間のパケットだけをキャプチャ画面で表示するようなフィルタを作成できる(図17)。

図17 Conversations機能ではデータのやりとりが多いアドレスを調査可能だ
図17 Conversations機能ではデータのやりとりが多いアドレスを調査可能だ

今回紹介したツール:Wireshark