検索
連載

Wiresharkで特定の相手との通信だけを表示させるTech TIPS

Wiresharkでパケットをキャプチャすると、解析対象以外にも多くのパケットが表示され、目的のパケットを見つけるのが簡単ではない。このような場合は表示フィルタを利用して、対象となるパケットを絞り込むとよい。特定の相手との通信だけを表示させるには、表示フィルタの条件式でip.addrを利用する。

PC用表示 関連情報
Share
Tweet
LINE
Hatena
「Tech TIPS」のインデックス

連載目次

対象ソフトウェア:Wireshark



解説

 TIPS「Wiresharkで特定の通信セッションだけを抽出して表示する」「Wiresharkで特定のプロトコルだけを表示させる」では、フリーの高機能なネットワーク・プロトコル・アナライザであるWiresharkを使って、パケットをキャプチャし、表示させる方法について解説した。本TIPSでは、特定のノードとの通信だけを取り出す表示フィルタについて解説する。

操作方法

●表示フィルタとは

 キャプチャしたパケットの中から、特定の条件にマッチするパケットだけを取り出して表示させる機能を表示フィルタという。表示フィルタの使い方はTIPS「Wiresharkで特定のプロトコルだけを表示させる」でも紹介しているが、Wireshark上部のツール・バーにある表示フィルタ欄(次の画面の(1)参照)に条件式を入力する。

表示フィルタ式の入力欄
表示フィルタ式の入力欄
表示用フィルタを設定すると、キャプチャしたパケットの中から、条件に合致するパケットだけが抽出され、解析しやすくなる。
  (1)ここに条件式を入力する。

●通信相手を限定させる表示用フィルタ

 特定の通信相手とのパケットだけを抽出するには、IPパケットの中にあるIPアドレス欄が、指定されたIPアドレス値を持つかどうかを調べればよい。

IPパケットの構造
IPパケットの構造
IPパケットには、「送信元」と「あて先(送信先)」を表す2つのIPアドレス・フィールドがある。これを条件にして特定のノードとの通信だけを抽出することができる。IPパケット構造の詳細については別稿の「IPパケットの構造」参照。
  (1)パケットの送信元のIPアドレス。
  (2)パケットのあて先(送信先)のIPアドレス。

 ただしIPパケットの中には、送信元と送信先(あて先)の両方のIPアドレスが含まれているため、少し注意が必要である。例えば、ある2台のコンピュータ間で通信(TCP通信でもよいし、UDPによる通信でもよい)が行われている場合、送信したパケットとその応答パケットでは、送信元IPアドレスとあて先IPアドレスのフィールドの内容が入れ替わっている。そのため、送信パケットと受信パケットの両方をまとめて抽出したければ(一般的にはこのような使い方が多いだろう)、「送信元IPがaa.bb.cc.dd」「あて先IPがaa.bb.cc.dd」という条件ではなく、「送信元かあて先のいずれかがaa.bb.cc.dd」という条件を指定するとよい。具体的には、次のような式を利用する。

意味
ip.src 送信元IPアドレス欄の値
ip.dst あて先IPアドレス欄の値
ip.addr 送信元IPアドレス欄か、あて先IPアドレス欄のいずれかの値
条件式中でIPアドレスを使う

 例えば、192.168.1.21というノードとの通信だけを抽出したければ、

ip.addr == 192.168.1.121
 もしくは
ip.addr eq 192.168.1.121



という条件を指定すればよい。「ip.src == 192.168.1.121」や「ip.dst == 192.168.1.121」では、片方向の通信しか抽出できない。

 なおip.addrなどと比較する相手は、数値によるIPアドレスだけでなく、コンピュータ名でも構わない。例えば、

ip.addr == server01



のようにすれば、server01という名前が検索され、その実際の値(IPアドレス)が条件式として使用される。条件式欄に入力する場合は、名前を1文字入力するたびに、インタラクティブに名前が検索され、見つかれば入力欄の背景が緑色に変わる(単一ラベルの名前だけでなく、FQDN名でもよい)。

●特定のノード“以外”との通信の抽出

 以上の条件を反転して、特定のノード“以外”との通信を抽出するにはどうすればよいだろうか? 上の条件を逆にして、

ip.addr != 192.168.1.121
 もしくは
ip.addr ne 192.168.1.121



とすればよいと考えるかもしれないが、実はこれはうまくいかない。この式は、「送信元IPアドレスかあて先IPアドレスのいずれかが192.168.1.121ではないもの」という条件であり、実際には、ほとんどすべてのパケットがこれに該当する(送信元もあて先も共に192.168.1.121のパケットだけが除外される)。正しくは、先の条件全体を否定して、次のようにする。

!(ip.addr == 192.168.1.121)
 もしくは
not (ip.addr eq 192.168.1.121)

※ ( ) は省略してもよい



● IPアドレスの範囲を調べる

 上の例では特定のIPアドレスかどうかを比較していたが、あるネットワーク・アドレスの範囲に属するかどうかを調べたいことがある。例えばアドレスの上位24bitが192.168.0.0/24のものだけを抽出したい、などである(/24という表記は、アドレスの最上位から24bit分だけに注目するという意味。CIDRなどで使われる。TIPS「IPアドレスとサブネットマスクをまとめて表記する」参照)。このようなケースでは、条件式の最後に「/24」と付ければよい。こうすると、上位の24bitだけが条件式の計算対象となる。

※IPアドレスが192.168.1.0〜192.168.1.255の範囲にあるものだけを抽出する条件式

ip.addr == 192.168.1.0/24



● Ethernetアドレス(MACアドレス)を条件式で使う

 Ethernetアドレス(MACアドレス)を条件式で使用するには、ip.〜ではなく、eth.〜を利用すればよい。

意味
eth.src 送信元Ethernetアドレス欄の値
eth.dst あて先Ethernetアドレス欄の値
eth.addr 送信元Ethernetアドレス欄か、あて先Ethernetアドレス欄のいずれかの値
条件式中でEthernetアドレスを使う

 Ethernetアドレスは、6つの(1桁もしくは2桁の)16進数を、ハイフンかコロンで区切って並べて記述する。例えばEthernetのブロードキャスト・パケットだけを抽出するには次のようにする。

eth.addr == ff-ff-ff-ff-ff-ff
 もしくは
eth.addr == ff:ff:ff:ff:ff:ff



「Tech TIPS」のインデックス

Tech TIPS

Copyright© Digital Advantage Corp. All Rights Reserved.

ページトップに戻る