今回はWireshark(ワイヤーシャーク)で取得したパケットの中から必要な情報を探す「ディスプレイフィルタ」のやり方を紹介します。
これにより膨大なパケットを1つずつ見て行かなくても、短時間で探し出すことが出来るので効率UPです。
是非、ご活用下さい。
関連ページ
wiresharkの使い方講座 ~パケットキャプチャの方法とパケットの見方について
wiresharkのストリーム表示機能でまとめてパケットの中身を確認する
パケットキャプチャ用に!ミラーポート対応のネットギア激安ハブに迫る
ディスプレイフィルタの適用と入力例
ディスプレイフィルタの入力と適用
1.画面左上のテキストボックスに条件を入力し、画面右の「Apply」をクリック。
これで条件に合致したパケットのみが表示されます。なおフィルタの入力部分が緑色になっている場合は文法が正常だという事です。ここが赤の場合は文法エラーとなります。
2.フィルタの解除する場合は、画面右の「Clear」をクリックして下さい。
ディスプレイフィルタの入力例
ip.addr ==【IPアドレス】
送信元、宛先に関わらず該当のIPアドレスを持つパケットを表示します。
例:ip.addr == 192.168.31.1
ip.addr ==【ネットワークアドレス/プレフィックス長】
IPアドレスの箇所にネットワークアドレスとプレフィックス長を書くことで、ネットワークアドレスを指定する事が可能。
以下の例では、192.168.31.0(24ビット)のネットワークを指定しています。
例:ip.addr == 192.168.31.0/24
ip.src ==【送信元IPアドレス】
送信元IPが該当のIPアドレスであるパケットを表示します。
例:ip.src == 192.168.31.1
ip.dst ==【宛先IPアドレス】
宛先IPが該当のIPアドレスであるパケットを表示します。
例:ip.dst == 192.168.31.1
tcp.port ==【tcpポート番号】
tcpポート番号について送信元、宛先に関わらず該当のポート番号であるパケットを表示します。
例:tcp.port == 80
udp.port ==【udpポート番号】
udpポート番号について送信元、宛先に関わらず該当のポート番号であるパケットを表示します。
例:udp.port == 53
tcp.dstport ==【宛先tcpポート番号】
宛先tcpポート番号について該当のポート番号であるパケットを表示します。 なお先頭のtcpはudpで指定する事も可能です。
例:tcp.dstport == 80
例:udp.dstport == 123
udp.srcport ==【送信元udpポート番号】
送信元udpポート番号について該当のポート番号であるパケットを表示します。 なお先頭のudpはtcpで指定する事も可能です。
例:ucp.srcport == 123
例:tcp.dstport == 80
ip.flags.df == 1
パケットの分割を禁止するDFフラグ(Don’t Fragment)が有効であるパケットを表示します。
tcp.flags.fin == 1
tcpで通信の正常終了が行われる時に付与されるFINフラグが有効であるパケットを表示します。
tcp.flags.reset == 1
tcpで通信の強制終了を行う場合に付与するRSTフラグが有効であるパケットを表示します。
and,or
条件式は「and」あるいは「or」で複数の条件を指定できます。 例えば「IPアドレスが192.168.31.1でHTTPの通信をしているパケット」を抽出したい場合は以下の通りとなる。 例:ip.addr == 192.168.31.1 and tcp.port == 80
not
否定も条件として指定できます。 先頭にnotをつけるだけでなく、!(条件式)でも可能です。 例えば「IPアドレスが192.168.31.1でHTTPを除いた通信のパケット」を抽出したい場合は以下の通りとなります。
例:ip.addr == 192.168.31.1 and not tcp.port == 80
例:ip.addr == 192.168.31.1 and !(tcp.port == 80)
最後に
wiresharkのディスプレイフィルタってどうも覚えられないんですよね・・そのためにここに載せて忘れてしまったら見ようと思っているアルパパでした(笑)
今回はディスプレイフィルタのやり方を紹介しましたが、ディスプレイフィルタはあくまで取得したパケットに対するフィルタです。 これとは別に「キャプチャフィルタ」というのがありまして、ディスプレイフィルタとは違い取得の時点からフィルタを掛ける事が出来ます。
膨大なパケットを取得する必要が無い状況ではこちらの方が良いかも知れませんね。
次回はオプションや上記のキャプチャフィルタについて載せていきたいと思います。
パケットキャプチャ関連商品の紹介
アルパパも購入して使用しているパケットキャプチャ関連商品を紹介します!
リックテレコム
売り上げランキング: 29,822
パケットキャプチャの入門書です。Wiresharkを使用したパケットキャプチャ方法などが詳しく載っています。大きな本なので持ち運びに不便ですが、情報量が多くオススメです。
売り上げランキング: 906
ミラーポートに対応したハブです。4000円弱の値段でパケットキャプチャをする環境が手に入れるってすごくないですか?
以下のページで詳しく紹介しています。
パケットキャプチャ用に!ミラーポート対応のネットギア激安ハブに迫る – Rpapa WEB
コメント
こんにちはナオパパです。
記事、楽しく読んでいます。
自分自身が発信しているパケットで絞り込みたい。
さらにいうと、自分のアプリ(Webサーバのプロセスw3wp.exe)で絞り込みたい。といったことができるものなんでしょうか?
>>ナオパパさん
コメントありがとうございます。
まず「自分自身が発信しているパケットで絞り込みたい」ですが、こちらは自分自身のIPアドレスを指定して絞り込めば良いと思います。
記事の例で行くとip.addr == 【自身のIPアドレス】をディスプレイフィルタに入力する事で、自身の送受信するパケットを見る事出来ると思います。
次に、「自分のアプリ(プロセス)で絞り込みたい」についてですが、残念ながらwiresharkでプロセスを元に抽出する事が出来ません。
試せていないですが、windowsであれば以下のツールでプロセスでパケットを追う事が出来るかもしれません。
http://www.nwlab.com/?p=755
ちょっと手間ですが、widnwosなら以下のような方法でも出来るかとおもいます。
(1)タスクマネージャーで該当のプロセス(w3wp.exe)のPIDを確認する。
(2)コマンドプロンプトで netstat -anoを実行し、該当のPIDを持つ通信のユニークとなるIPやtcp,udpのポート番号を確認する。
(通信中のみ表示)
(3)wiresharkで上記のユニークな値を条件に設定し、抽出する。
一番簡単なのは、IPアドレスやポート番号で絞る事ですが、別プロセスなのにほとんど同じような通信(ポート番号も宛先のIPも一緒)
をプロセス単位で調査したい場合はこのような施策が必要になると思います。