このページは乱ことNobuoNakakoが運用する「Etherealを使おう」の一部です。お時間があれば表紙も訪れてやってください

リンク等についてはこちら。間違いを見つけた時や「ここはこうした方が良い」等の意見は遠慮なくこちらまで。


The Ethereal manual (WINDOWS&UNIX Var0.9.16)

フィルタ作成方法
調査

Etherealを使っていく上で最も重要な行為がこのフィルタの定義になると思います。

「Etherealを使おう」では「フィルタの基本設定」や「その他のフィルタ設定」でフィルタの定義を解説していますが。ここではわざわざ定義を入力なくても簡単にフィルタを作成できる方法を解説していきたいと思います。

フィルタの基本知識
とりあえずフィルタを書いてみる
[Display]の[Prepare]を利用する
[Display]の[Prepare]で定義を組み合わせる
[Display]の[Prepare]メニューの内容
定義したフィルタを保存する
[Filter Expression...]によるフィルタ定義

フィルタの基本知識

 ●Etherealには2つのフィルタ方式がある

まず最初にEtherealには大きく2つのフィルタがあります。1つは「キャプチャフィルタ(Capture Filter)」といわれるものでパケットをキャプチャする際にフィルタをかけフィルタの条件に一致したものだけを取り込むというものです。2つ目は「ディスプレイフィルタ(Display Filter)」といわれるものでキャプチャした後のデータに対してフィルタを定義し一致したものだけを表示する事のできるものです。

実はこの「キャプチャフィルタ」と「ディスプレイフィルタ」は定義の方法が違います。「Etherealを使おう」では基本的に前者の「キャプチャフィルタ」をという表現でおこなっており「ディスプレイフィルタ」をとしています。

基本的によく使用するは恐らくの「ディスプレイフィルタ」になります。又、「キャプチャフィルタを知らなくても、基本的にはキャプチャした後で「ディスプレイフィルタ」により定義すれば結局は同じ結果になります。

従ってディスプレイフィルタの定義方法さえ知っていれば基本的には問題なくEtherealでフィルタを使いこなす事ができます。

 ●ディスプレイフィルタ

 「ディスプレイフィルタ」は先程も述べた様にキャプチャした後に使用するフィルタです。基本的にはEtherealのメイン画面左下にあるFilterウィンドウで定義を

 実はこの他にもキャプチャ結果に色をつける時パケットを検索するとき統計をとる時等、様々な所でフィルタ定義する際に使用します。

とりあえずフィルタを書いてみる

 とりあえずフィルタを書いてみましょう。フィルタ定義文の詳細は「フィルタの基本設定」や「その他のフィルタ設定」で記載していますが今回はこれを見なくても問題はありません。

Pingのサンプルファイルがここにあります。これを基に解説をしていきたいと思います。

ファイルの開き方は「キャプチャ結果を開く」を参照して下さい。
(最近、ダウンロードの際に文字コードが変換されてしまうという症状でお悩みの方からメールを頂きます。エンコードはSJISでお願いします)

まずこのキャプチャ結果から送信元が192.168.0.1のパケットのみを表示したい場合、下記の様に設定します。

ip.src == 192.168.0.1

ipはIPの事、srcは送信元(Source)を意味しておりその後に条件である192.168.0.1を==で結びます。

をクリックします。

結果表示としては下記の様に2行目のキャプチャデータのみが表示されたと思います。

をクリックすると定義が解除されます。

さて、上記の様に「送信元が192.168.0.1」という定義でディスプレイフィルタを作成するのは非常に簡単ですが「192.168.0.1が送信元のPingのReplyだけ」といった複雑な定義になるとそうはいせん。

この様な定義でも簡単に設定する方法を解説していきたいと思います。

[Display]の[Prepare]を利用する

最も簡単にフィルタ定義を作成できる方法は[Display]選択にある[Prepare]のになると思われます。

例えば先程ので解説した「送信元が192.168.0.1」という定義をこの方法により作成する場合、下記の様な手順で行います。

1.まず最初に定義の元となる送信元(Source)が192.168.0.1のキャプチャを選択します。(2番あたりが最適です)

2.選択したら詳細フレームを見て下さい。下記の様に表示されているはずです。

この中で送信元(Src)の192.168.0.1が記載してある項目(フレーム)を探して下さいで囲ってある通り、[Intrernet Protocol]の項目(IPフレーム)に記載してあるはずです。

3.[Internet Protocol]の項目(IPフレーム)のをクリックして展開してください。

ここでも先程と同じ用に送信元(Source)の192.168.0.1が記載してある部分を探してそこを選択します

4.選択された状態で[Display]→[Prepare]→[Selected]を選択します。
※選択した項目の上で右クリックして[Prepare]→[Slected]でも可能です。

5.Etherealの画面左下のFilter欄に下記の様に定義が入力されているのを確認して下さい。

6.をクリックして下さい。定義が適用され、下記の様にキャプチャ結果が表示されます。

この様に自動的にフィルタ定義が作成されますので非常に便利です。

[Display]の[Prepare]で定義を組み合わせる

サンプルのキャプチャは4つのPingのrequestパケットとそれに対する返答である4つEchoパケットの合計8行のPingパケットになります。

このPingパケットのICMPフレームにはシーケンス番号(Sequence number)というものがあります。Pingを発信したrequestパケットとそれに対する返答のEchoパケットのシーケンスNoは同じ番号です。この番号によりどのRequest信号に対するEchoパケットなのかという情報が分かる様になっています。

つまり1番のシーケンス番号と2番のシーケンス番号は同じ番号を使用しており、3番と4番もまた同じシーケンス番号で結ばれています。

シーケンス番号の指定をするフィルタ定義は下記の様にします。

frame[40:2] == 21:00

この定義の場合、1番と2番のパケットのみが表示されのこりは表示されません。

まずこのシーケンス番号と送信元のIP両方を指定する場合の下記Filter定義を作成する為の手順を解説したいと思います。

(ip.src == 192.168.0.1) && (frame[40:2] == 21:00)

1.まず「送信元が192.168.0.1」という定義をの1番〜5番までの手順で作成してください。

2.次にこの定義に更にシーケンス番号を追加する為に選択して下さい。

3.[Display]→[Prepare]→[And Selected]を選択して下さい。

4.Etherealの画面左下のFilter欄に下記の様に定義が入力されているのを確認して下さい。

5.をクリックして下さい。定義が適用され、下記の様にキャプチャ結果が表示されます。

この様に[And Selected]を選択するだけで組み合わせが可能となります。

[Display]の[Prepare]メニューの内容

[Display]の[Prepare]のメニューは以下の様になっています。

[Selected]について

選択した条件と同一の物に限り表示します。

[Not Selected]について

選択した条件以外の物に限り表示します。

[And Selected]について

基本的に既に[Filter]に条件が入っている状態に使用します。(入ってなくても一応動作しますが)

既に入力した条件選択した条件が一致した場合に限り表示します。

[Or Seledted]について

基本的に既に[Filter]に条件が入っている状態に使用します。(入ってなくても一応動作しますが)

既に入力した条件若しくは選択した条件が一致した場合に限り表示します。

[And Not Selected]について

基本的に既に[Filter]に条件が入っている状態に使用します。(入ってなくても一応動作しますが)

既に入力した条件と選択した条件が一致しない場合はすべて表示します。

[Or Not Selected]について

基本的に既に[Filter]に条件が入っている状態に使用します。(入ってなくても一応動作しますが)

既に入力した条件若しくは選択した条件が一致しない物はすべて表示します。

定義したフィルタを保存する

折角定義しても保存しなければすぐに定義文は消えてしまいます。

ここでは定義文の保存方法を解説します。

とりあえずで作成した定義文を保存してみましょう。

1.まず定義文を作成します。

2.をクリックします。

上記の様なウィンドウが立ち上がると思います。一番下の[Filter string]欄に選択した定義が入っている事を確認して下さい。

3.[Filter name]に名前を入れます。(英数文字)


例:192.168.0.1_SRC

4.をクリックします。

上記の様に設定が追加された事を確認して下さい。

5.をクリックして設定を保存します。

以上がフィルタ定義の保存方法です。保存された設定はWindows2000の場合、[Documents and settings]→[Administrator]→[Application Data]→[Ethereal]の中にある[dfilters]というファイルに記載されます。

[Filter Expression...]によるフィルタ定義

先程ので解説した[Display Filter]のウィンドウを見て下さい。というボタンがあると思います。

これはフィルタの定義を選択により行う事ができるもので。これを使いこなすといちいちフィルタの定義文を覚えなくても定義が可能となります。まだキャプチャしていないパケットに対してフィルタを作成したり、よく知らないプロトコルに対してフィルタがどんなものがあるのか調べたい等といった時に使用するのが良いと思われます。

さて、その前にICMPについて少し解説します。

ICMPはPingに使用されるプロトコルです。通常のプロトコルと違い、下記の様にEthernetフレームとIPフレームのみが付随しており、TCPやUDPは通常のPingでは付属しません。

一番左の[タイプ]が非常に重要で、このタイプにパケットの目的(ICMPの種類)が分かります。ICMPのタイプはRFC792、950、1256、1393、1788等で定義されています。基本的な部分は792で定義されていますが重要な3つのみ下記表にいたしました。

タイプ
0 Echo Reply 8番のリクエストに対して返ってくる事が多いです。Pingでいうと相手からの返答のICMPパケットはこのタイプ番号がICMPフレームに格納されています。
3 Destination Unreachable パケットが指定した宛先(IP)まで到達できない場合に出されます。基本的にルーティングの設定がうまくいっていない場合に多いです(特にゲートウェイアドレスが設定されていない時)

8

Echo Pingでは相手に対して発信するICMPパケットに格納されるタイプです。相手はこの8が入ったパケットをもらうと0をICMPフレームに格納して送信元に返信します。

 

これを踏まえた上で先程のICMPのサンプルを使用してICMPのechoパケット(タイプ8)のみを出すフィルタの作成方法を解説していきたいと思います。

1.[Display Filter]でをクリックして下さい。

2.[Field name]で[ICMP]を探して下さい。

3.をクリックし[Type]を選択して下さい。

4.[Relation]で[==]を選択して下さい。[Value(unsigned,1byte)]という項目が登場します。

5.[Value(unsigned,1byte)]に8(タイプecho)と入力してください。

6.をクリックして下さい。

7.[Display Filter]の[Filter String]を見てください。[icmp.type == 8]と入っているはずです。[Filter name]で適当に名前をつけて[New]ボタンを押してフィルタ定義を追加してください。

8.ボタンをクリックして下さい。下記の様にフィルタが反映されたはずです。

ICMPの(Echo)パケットのみが表示されたはずです。


Copyright 2003 by Nobuo Nakako All right reserved.