【Wireshark】キャプチャ取得するパケットをフィルタする

Wiresharkで、パケットキャプチャする際に、キャプチャオプション設定により、キャプチャ対象のパケットをフィルタしたり、長時間のキャプチャ取得するためのファイル分割など設定することができます。この記事では、キャプチャオプションの設定のうち、キャプチャ対象のパケットをフィルタ(キャプチャフィルタ)について、記事にします。
スポンサーリンク

キャプチャオプション(入力)

キャプチャオプションは、キャプチャ >> オプション より起動します。

キャプチャオプションは、入力出力オプションの3つのタブ分かれます。

キャプチャフィルタは、入力タブで設定します。入力タブの中身を確認していきます。
スポンサーリンク

インターフェース

キャプチャを取得するインタフェースを指定します。

トラフィックで、トラフィックのある・なしが視覚的に表示されます。
プロミスキャスにチェックがある場合は、プロミスキャス(無差別)モードとして、自分宛のパケットだけでなく、インタフェース上を流れるすべてのパケットをキャプチャします。
スポンサーリンク

キャプチャフィルタ

キャプチャを取得する際に、特定の条件をキャプチャフィルタとして指定し、キャプチャ対象を絞ることができます。大量に通信が流れている環境で、取得対象のパケットが明確である場合に有効です。
インターフェースを選択のうえ、選択したインタフェースのキャプチャフィルタ にフィルタを記述することで、適用されます。
構文が問題がない場合は、背景がになります。

構文に問題がある場合は、背景がになります。

よく使用されるいくつかのフィルタは、事前に定義されており、値などカスタマイズし、適用することができます。緑のマークをクリックすることで、定義内容が確認できます。
また、新たにキャプチャフィルタを定義する場合は、キャプチャフィルタ管理をより追加できます。

キャプチャフィルタ管理 をクリックすると、下記の画面となり、マークで定義の追加、マークで定義の削除ができます。
キャプチャ定義は、Berkeley Packet Filter(BPF)構文で記述します。
BPF構文は、修飾子ID文字列の組み合わせであるプリミティブ(基本要素)から構成されます。

修飾子には下記の種類があり、複数使用することができます。
  • Type(ID文字列の意味)ether, host, net, port 。指定がない場合はhostとみなされる。
  • Dir(方向)src , dst。何も指定しない場合は、双方向とみなされる
  • Proto(プロトコル)ether,ip,tcp,udp,icmpなど
複数のプリミティブを演算子でつなげ、複数条件を定義することができます。演算子は論理積(AND:&&)、論理和(OR : ||)、否定(NOT:!)があります。

例えば、宛先ホスト192.168.1.1で、かつ、TCPポート番号443のみキャプチャしたい場合は、
dst host 192.168.1.1 && tcp port 443 
と定義します。

以降、フィルタの設定例を確認します。

スポンサーリンク

アドレス・ホストによるフィルタ

特定のIPアドレスの通信のみをキャプチャ

host 192.168.3.37

特定の送信元IPアドレスの通信のみをキャプチャ

src host  192.168.3.37  もしくは、src 192.168.3.37

特定の宛先IPアドレスの通信のみをキャプチャ

 dst host  192.168.3.37  もしくは、dst  192.168.3.37

特定のMACアドレスの通信のみをキャプチャ

ether host  28-11-a8-31-5f-29

スポンサーリンク

ポートによるフィルタ

特定のポート番号の通信のみをキャプチャ

port 443

特定の宛先ポート番号の通信のみをキャプチャ

dst port 443

特定の送信元ポート番号の通信のみをキャプチャ

src port 443

特定のポート番号を除く通信のみをキャプチャ

 !port 443

スポンサーリンク

プロトコルによるフィルタ

すべてのICMP通信のみをキャプチャ

icmp

 

すべてのTCP通信のみをキャプチャ

tcp

すべてのUDP通信のみをキャプチャ

udp

TCP通信を除く通信のみをキャプチャ

!tcp

スポンサーリンク

プロトコルフィールドによるフィルタ

プロトコルヘッダをバイト単位に区切り、そのフィールドの値をもとにフィルタを作成することができます。
プロトコル名のあとの[ ]の中にオフセットを入れて、条件となる値を指定します。
オフセットとは、基準点からの位置を表す値で、基準として、プロトコルヘッダーの先頭1バイト(8ビット)目を0とします。
下記ではIP ICMP TCPヘッダを例に使用例を確認します。各ヘッダーの図の赤数字がオフセット値です。

IPヘッダ(TTLフィールドを参照)

IPヘッダの構成は下記となります。

IPヘッダのTTL値が60より小さい 通信のみをキャプチャする場合は、オフセット8番目の値が60未満であることを条件にします。
ip[8] < 60

ICMPヘッダ(タイプフィールドを参照)

ICMPヘッダの構成は下記となります。

pingのうち、ICMPエコー(タイプが8 通信のみをキャプチャする場合は、オフセット0番目の値が8であることを条件にします。
icmp[0] == 8

ICMPエコー(タイプが8)とリプライ(タイプが0)通信のみをキャプチャする場合は、オフセット0番目の値が8(エコー)、もしくは0(リプライ)であることを条件にします。
icmp[0] == 8  || icmp[0] == 0

ICMPのタイプについては、下記の記事も参考にしてください。

  >> 参考記事 :  【初心者わかりやすく】ICMPを詳しく解説

【初心者わかりやすく】ICMPを詳しく解説
ICMP(インターネット制御メッセージプロトコル)は、ネットワークの診断や管理に使用されるネットワークプロトコルです。一番有名なのはPing(エコーリクエストとリプライ)です。ICMPはTCPやUDPのようなポート番号という考え方はありませ...

TCPヘッダ(フラグを参照)

TCPヘッダの構成は下記となります。

TCPフラグSYNRSTなど)は、オフセット13番目となります。
たとえば、RSTがセットされている通信のみをキャプチャするとします。
パターンとして、RSTのみRST/ACKなどフラグのパターンが複数あるため、RSTだけセットされたビット列(00000100:4)で論理積を計算します。

RST/ACKがセットされたパケットを論理積で計算した場合は、上記のように、結果は 4 (00000100)となります。もし、RSTがセットされていなければ、結果は0 (00000000)となります。
つまり、tcp[13] & 4 の値が0以外の場合は、RSTがセットされています。
tcp[13] & 4 != 0   (もしくは、tcp[13] & 4 == 4

SYN/ACKのビットがセットされている通信のみをキャプチャする場合は、tcp[13]が18(16+2)という条件で指定できます。
tcp[13] == 18

コメント