ポン酢ブログ(β)

The harder you work, the luckier you get. - Gary Player

ディスプレイフィルタ - The Wireshark Wiki (日本語訳)

本記事は IGGG Advent Calendar 2016 10日目の記事です.
今回は WiresharkWiki を日本語訳します.今回は DisplayFilters - The Wireshark Wiki です.
環境は English を想定しています.

    • -

ディスプレイフィルタ

Wiresharkは一般的なパケットを表示やカラーリングルールのためにディスプレイフィルタを利用します.
ディスプレイフィルタの基本や文法についてはユーザーズガイドに記載されています.
もし特定のプロトコルに関するディスプレイフィルタを必要とする場合はプロトコルリファレンスをご覧ください.

ディスプレイフィルタはキャプチャフィルタではない:

キャプチャフィルタ(例:tcp port 80)は,ディスプレイフィルタ(例:tcp.port == 80)ではありません.
こちらもご覧ください: CaptureFilters#Capture_filter_is_not_a_display_filter

見本

SMTP(ポート25)とICMPトラフィックのみを表示する]

tcp.port eq 25 or icmp

LAN内(インターネットではない,ワークステーションとサーバの間)のトラフィックのみを表示する場合:

ip.src==192.168.0.0/16 and ip.dst==192.168.0.0/16

TCP バッファが一杯*1(ソースが宛先にデータの送信を停止する指示をしたとき):

tcp.window_size == 0 && tcp.flags.reset != 1

Windows 向けフィルタ -- Windows クライアントとデータベース間の通信をフィルタする

smb || nbns || dcerpc || nbss || dns

Sasser ワーム

ls_ads.opnum==0x09

8バイトのUDPヘッダを無視し,UDPペイロードの最初の任意の3バイト 0x81,0x60,0x03を含むパケットをフィルタする(16進数のみ,独自プロトコルに役に立つでしょう):

udp[8:3]==81:60:03

slice 機能はMACアドレスのOUIをフィルタすることにも役に立ちます.詳しくはEthernetページをご覧ください,これであなたは特定のデバイス製造元のみのパケットをフィルタすることができます(たとえばDELLマシンのみ):

eth.addr[0:3]==00:06:5B

これらはどのフィールドやプロトコルの中で検索するときに利用できます.

UDPヘッダもしくはペイロードに含まれる 0x81,0x60,0x03 を見つける:

udp contains 81:60:03

SIP Toヘッダに含まれる文字列"a1762"を見つける:

sip.To contains "a1762"

これらの記号には正規表現Perl正規表現文法に従います.(Wiresharkはlibpcreとビルドされている必要があります.)

HTTPリクエストの最後のURI文字列に含まれる"gl=se"をフィルタする:

http.request.uri matches "gl=se$"

ノート: $ はPCREの句読点で,文字列の最後と一致させます.この場合ではhttp.request.uriフィールドの最後です.

プロトコル(たとえばSIP)でフィルタし,不要なIPをフィルタする:

ip.src != xxx.xxx.xxx.xxx && ip.dst != xxx.xxx.xxx.xxx && sip

落とし穴

いくつかのフィルタフィールドは複数のプロトコルフィールドと矛盾してマッチします.
たとえば,"ip.addr"はIPヘッダに含まれるソースアドレスと宛先アドレスをフィルタします.
これは"tcp.port","udp.port","eth.addr"なども同じです.

ip.addr == 10.43.54.65

ip.src == 10.43.54.65 or ip.dst == 10.43.54.65

と同値です.

直感的にこれらにも当てはまるでしょう.もし私達が10.43.54.65からのトラフィックをフィルタしたいなら
以下の

ip.addr != 10.43.54.65

ip.src != 10.43.54.65 or ip.dst != 10.43.54.65

と同値です.
これは,「ソースIPv4アドレスが10.43.54.65からかつ宛先IPv4アドレスが10.43.54.65のトラフィックを除いたすべてのトラフィックをフィルタする」ということですが,これらは私達が望んでいないことです.

代わりに,私達がこう表現する必要があります.

! ( ip.addr == 10.43.54.65 )

! (ip.src == 10.43.54.65 or ip.dst == 10.43.54.65)

と同値です.

これは「ソースIPv4アドレスが10.43.54.65もしくは宛先IPv4アドレスが10.43.54.65のトラフィックを除いたすべてのトラフィックをフィルタする」ことで,私達が望んでいたことです.

例えば,トンネルされたプロトコルであなたが2つのIPv4もしくはIPv6レイヤーを分離もしくは2つのIPv4もしくはIPv6ヘッダを分離するためや,あなたが他の理由でフィールドに複数のインスタンスが必要になることがあります.(例: IPv6のネクストヘッダフィールド)

name op valueはnameフィールド,opは==や!=や<のような比較のオペレータで,valueは値です.
少なくとも1つの該当するnameフィールドがあり,同値(でない),少ない(などの)valueが存在することと意味は同じです.その逆は,少なくとも1つの該当するnameフィールドがなく,同値(でない),少ない(などの)valueが存在することと意味は同じです.無効,逆を表す簡単なオペレータは==と!=や<と>=で,あとは元の意味と確認するために無効の否定を確かめてください.

こちらも参照

CaptureFilters

外部リンク

Displaying HTTP traffic to debug Apache
Capture and display filter Cheat sheets

___
This article is under the GNU General Public License.

*1:筆者注: TCP ゼロウィンドウ