WebOS Goodies

WebOS の未来を模索する、ゲームプログラマあがりの Web 開発者のブログ。

WebOS Goodies へようこそ! WebOS はインターネットの未来形。あらゆる Web サイトが繋がり、共有し、協力して創り上げる、ひとつの巨大な情報システムです。そこでは、あらゆる情報がネットワーク上に蓄積され、我々はいつでも、どこからでも、多彩なデバイスを使ってそれらにアクセスできます。 WebOS Goodies は、さまざまな情報提供やツール開発を通して、そんな世界の実現に少しでも貢献するべく活動していきます。
Subscribe       

Ethereal でパケットキャプチャ

本日は、ネットワークパケットのリアルタイムキャプチャ・解析ツールである Ethereal をご紹介しようと思います。Ethereal はパケットキャプチャツールの中でも最も有名なもののひとつで、GPL ライセンスで公開されているので無料で利用できます。Windows や Linux をはじめとする多数のプラットフォームで動作し、使いやすい GUI を提供しています。ネットワークのメンテナンスには必須のツールですので、まだ使っていない方はぜひご覧ください!

インストール

それでは、Ethereal をインストールしましょう。ここでは Windows 版を前提にします。Linux では、ほとんどのディストリビューションでパッケージが用意されていると思いますので、それを利用するのがよいとおもいます。GentooLinux であれば、以下の emerge だけで OK だと思います。

emerge net-analyzer/ethereal

それでは、Windows 版のインストール方法をご紹介します。Windows 版にはインストーラが用意されているので、それを利用しましょう。インストーラは Ethereal のダウンロードページからダウンロードできます。ただし、「Download Now」のリンクはかなり重いようなので、いずれかのミラーを利用するのをお勧めします。

ダウンロードが終わったら、インストールを起動しましょう。インストール手順は以下のとおりです。

  1. インストーラを起動すると、「Welcome to Ethereal〜」のダイアログが表示されます。「Next」をクリックします。
  2. ライセンス(GPL)が表示されます。「I Agree」をクリックします。
  3. インストールコンポーネントの選択画面になります。デフォルトのままで問題ないと思います。「Next」をクリックします。
  4. ショートカット作成などの設定画面になります。お好みで設定してください。「Next」をクリックします。
  5. インストールディレクトリの選択画面になります。デフォルトのままで問題ないと思います。「Next」をクリックします。
  6. WinPcap のインストール設定画面になります。「Install WinPcap〜」のチェックは必ず入れてください。もし管理者権限を持たないユーザーでも Ethereal を利用したいなら、「Start WinPcap service "NPF" at startup」のチェックを入れておきましょう(あまりお勧めしませんが)。設定したら、「Install」をクリックします。
  7. インストールの途中で、WinPcap のインストーラが起動し、ダイアログが表示されます。「Next」をクリックします。
  8. WinPcap のライセンスが表示されます。「I Agree」をクリックします。
  9. 少し待つと、WinPcap のインストールが終了します。「Finish」をクリックします。
  10. 残りのファイルがコピーされ、進捗バーの上に「Completed」と表示されたらインストール終了です。「Next」をクリックします。
  11. 「Completing the Ethereal〜」の画面になるので、「Finish」をクリックします。これでインストール終了です。

Ethereal を起動する

それでは、早速 Ethereal を使ってみましょう。スタートメニューの [プログラム]-[Ethereal]-[Ethereal] から起動すると、以下のようなウインドウが起動します。

けっこうシンプルなウインドウですが、使いやすくまとまっています。

とりあえずキャプチャしてみる

まずは普通にパケットをキャプチャしてみましょう。メインメニューから [Capture]-[Options] を選択してください。「Ethereal Capture Options」のダイアログが開くので、一番上の「Interface」コンボボックスでパケットをキャプチャするネットワークカードを選択します。そして、ダイアログ右下にある「Start」ボタンをクリックすれば、キャプチャが開始されます。

ダイアログが表示され、キャプチャしたパケット数がプロトコルごとに表示されます。Web ブラウザで適当なページにアクセスすると、その通信内容がすべてキャプチャされます。適当な頃合で「Stop」ボタンを押してください。メインウインドウにキャプチャしたパケットのリストが表示されます。

一番上のビューがキャプチャしたパケットの全リストで、その下が選択されているパケットの概要、一番下がパケットの 16 進ダンプです。リストからさまざまなパケットを選択して、中身を覗いてみてください。各プロトコルの実際のやり取りがわかって、なにげに勉強になります(笑)。パケットのリストでパケットが色分けされていますが、それぞれの色の意味はメインメニューの [View]-[Coloring Rules] で確認できます。

なお、上記の画面レイアウトは柔軟にカスタマイズできます。メインメニューの [Edit]-[Preferences] を選択して「Ethereal Preferences」ダイアログを表示させ、「Layout」の画面で設定します。また、「Capture」の画面でデフォルトのネットワークカードを設定しておけば、次回からはメインメニューの [Capture]-[Start] を選択するだけでキャプチャを開始できます。

表示するパケットをフィルタリングする

少し通信しただけでもかなりの量のパケットがキャプチャされるので、目的のパケットを探すのはけっこう大変です。そこで、条件を指定して表示するパケットを絞り込む方法を覚えましょう。ツールバーの下にある「Filter」というテキストボックスに条件式を入力することで実現できます。非常に多くの機能があるので、ここでは代表的な機能のみをご紹介します。それ以上の詳細に関しては、ethereal-filter の man ページをご覧ください。

プロトコル指定

あるプロトコルのパケットのみを見たいなら、単純にそのプロトコル名をテキストボックスに入力し、Enter キーを押します。指定できるプロトコルの全リストは、メインメニューの [Help]-[Supported Protocols] で参照できます。小文字で記述する必要がある点に注意してください。

フィールドの値を比較

パケット内のあるフィールドの値によってフィルタリングすることもできます。書式は以下のとおりです。

<フィールド名> <演算子> <値>

フィールド名には、比較に使用するフィールドの名前を指定します。フィールド名の全リストは [Help]-[Supported Protocols] で「Display Filter Fields」タブをアクティブにすることで確認できます。

演算子は比較の条件を指定します。==, !=, <, <=, >, >= の演算子が使用できます。これらの演算子は可換ではない(右辺と左辺は入れ替えられない)ことに注意してください。必ず左辺がフィールド名でなければなりません。

は比較の基準になる定数です。フィールド名 に指定できるフィールドごとに型が決まっており、それに合わせた記述方法を使わなければなりません。以下に代表的な記述方法を掲載しておきます。

データタイプ記述例
整数128(10進), 0200(8進), 0x80(16進)
Ethernet Addressff:ff:ff:ff:ff:ff
IPv4 Address192.168.0.1, 192.168.0.0/24
文字列"abc", "\x61bc"

論理演算による組み合わせ

上記の各種条件指定を論理演算子を使って組み合わせることができます。使用できる演算子は、&&(論理積), ||(論理和), ^^(排他的論理和), !(否定) です。例えば、以下のようになります。

http && ip.addr == 192.168.0.1

フィルターの構築を補助する機能

フィルターの記述はけっこう大変なので、それを補助する機能が搭載されています。

まず、条件式のプリセット機能があります。テキストボックスの左にある「Filter」ボタンをクリックすると、「Etheral Display Filter」ダイアログが開きます。ここでよく使う条件式を記憶させておき、簡単に呼び出すことができます。デフォルトで代表的な検索式が登録されているので、参考にすると良いでしょう。

もうひとつが検索式のエディタです。テキストボックスの右の「Expression」ボタンをクリックすると、「Ethereal Filter Expression」ダイアログが表示されます。右のツリービューに使用可能な全てのフィールド名がリストアップされ、演算子を選択して値を入力すると検索式を作成してくれます。

キャプチャするパケットをフィルタリングする

ここまでで表示するパケットをフィルタリングする方法をご紹介しましたが、Ethereal ではパケットをキャプチャするときにフィルターをかけることもできます。大量のパケットをキャプチャするときはこちらのほうが便利でしょう。

しかし、残念ながら表示のフィルタリングとは条件式の記述方法がまったく異なります。こちらの記述方法は tcpdump コマンドと同じで、tcpdump コマンドの man ページに詳細が記載されています。ここでは、やはり代表的な記述のみご紹介します。

キャプチャ時の条件式は、メインメニューの [Capture]-[Options] を選択して開く「Ethereal Capture Options」ダイアログで指定します。「Capture」の枠の一番下にあるテキストボックスです。左の「Capture Filter」ボタンをクリックすると、プリセットの条件式の保存・呼び出しダイアログが開きます。また、右の▼ボタンをクリックすれば履歴から選択できます。

条件式全体の書式は、以下のようになります。

[not] <条件1> [<and|or> [not] <条件2>...]

複数の条件を and もしくは or で接続して複数組み合わせることができます。また、条件の前に not を付けると、条件が満たされないときにパケットをキャプチャする指定になります。

使用できる条件の主なものをご紹介します。

[src|dst] host <ホスト名>
パケットの送り元、もしくは送り先がホスト名だった場合に真になります。ホスト名 には IP アドレスも指定できます。デフォルトでは送り元か送り先のどちらかがマッチすれば真ですが、src または dst を指定することでどちらかに限定できます。
[tcp|udp] [src
dst] port <ポート番号>|パケットのポート番号によってフィルタリングをかけます。また、tcp または udp が指定されると、そのプロトコルのみが対象になります。デフォルトでは送り元か送り先のどちらかのポート番号がマッチすれば真ですが、src または dst を指定することでどちらかに限定できます。
less <パケット長>
パケットサイズがパケット長以下だった場合に真になります。
greater <パケット長>
パケットサイズがパケット長異常だった場合に真になります。
ip <broadcast|multicast>
パケットがブロードキャスト、またはマルチキャストだった場合に真になります。

以上、駆け足でしたが Ethereal の基本的な使用方法をご紹介しました。サーバートラブルなどの際にパケットキャプチャが使えると原因究明にとても役立ちます。ネットワークプロトコルの勉強にもなりますので、ぜひインストールして使ってみてください!(^^)

追記

現在 Ethereal の開発はほぼ停止して、 Wireshark というプロジェクトに引き継がれているそうです。なんでも製作者とコミュニティーが丸ごと移行したんだそうな。いったいなにがあったんだ・・・(^^;。まあ、エンドユーザーとしてはツールの開発が継続されていれば問題はないのですが。

関連記事

この記事にコメントする

Recommendations
Books
「Closure Library」の入門書です。
詳しくはこちらの記事をどうぞ!
Categories
Recent Articles