Wiresharkでパケット監視をする時、例えば「送信元IPアドレスが〇〇のパケットだけ画面に出てくるようにしたい」などと感じることも多いと思います。
特に大規模なネットワークでWireSharkを使用する場合、フィルタリングを掛けずに使用すると膨大な量のパケットが画面に表示されてしまい、本来分析をしたいパケットが埋もれてしまう問題があります。
こうした場合、例えば「送信元IPアドレスが〇〇の場合」や「プロトコルが××の場合」などのように収集するパケットにフィルタを掛けることで、必要なデータだけを取得することが可能です。
今回はそうしたWiresharkでのパケットの検索・フィルタ方法について解説を行っていくので、ぜひ参考にしてください。
ちなみに僕は仕事でWiresharkを使っていますが、今回紹介する検索やフィルタ機能が使えればかなり便利になるので、良かったら参考にしてください!
見出し
Wiresharkでは「検索」と「フィルタリング」が可能
Wiresharkでは膨大の量の通信の中から目的のパケットを探し出すために「検索」と「フィルタリング」の機能が備わっています。
なお、それぞれの違いとしては下記の通りです。
フィルタリング:検索条件に合う通信のみを、パケットキャプチャで収集する
検索では一度すべてのパケットを収集した後に目的の物を検索するのに対して、フィルタリングではそもそも指定した条件に合うパケットしか収集されません。
それぞれ一長一短がありますが、あらかじめパケットの条件を絞っても問題ないのであれば「フィルタリング」のほうが視認性が良いので使いやすいですし、全パケットからいろいろな検索条件で対象のデータを探したいのであれば「検索」のほうが網羅性が高いので使いやすいです。
ただ「フィルタリングでざっくり絞った後に検索で個別のパケットを調べる」ということも出来るので、どちらも併用して便利に使えばいいと思います。
ただ、実際にネットワークの障害対応をする時にフィルタリングを使うことはあんまりないかな?
例えばネットワークで輻輳が起きてて○○の機器が原因っぽいって場合にIPアドレス等でフィルタをかけても、もしかすると別の機器が原因の場合もあったりするからね…。
Wiresharkで「検索」を行う方法
では、ここからはまずWiresharkで「検索」を行う方法を解説します。
Wiresharkの検索機能では、一度すべてのパケットを取得した後、目的の検索条件に合うパケットがあるかどうか検索を行うことが出来ます。
ただ、検索の場合は仕組み上画面に表示されるパケットの量も増えてしまうので、どんなパケットを抽出したいかが決まっているなら後述の「フィルタリング」のほうが使いやすいと思います。
手順① インターフェイスを選択して、通常どおりパケットの取得を行う。
まずは普段通りパケットキャプチャを行います。WI-Fiやイーサネットなど、LANで使用しているネットワークインターフェースを選択しましょう。
手順② 画面上部の虫眼鏡マークをクリックして、抽出条件を入力して検索を行う。
次に画面上部の虫眼鏡のマークをクリックすると検索ボックスが画面に表示されるので、そこに検索を行いたいIPアドレスやプロトコル、MACアドレス、ホスト名などを指定すれば検索が可能です。
これでパケットの検索は完了です。もし検索が上手くいかない場合は、上記画像で検索条件を入れている左の「パケット詳細」や「文字列」の部分が間違った設定になっていないかを確認してみてください
ただこの画像を見て分かる通り、検索機能だけでは非常に多くのパケットから目的のデータを探さなければならないため、網羅性が高い代わりに視認性が悪いです。
もしこの画面で見にくいという場合は、後述する「フィルタリング」でパケットの種類を絞った後に「検索」機能で細かいパケットを検索するといいでしょう。
上記がWiresharkでの「検索」のやり方でした!
次は「フィルタリング」のやり方について解説を行います!
Wiresharkで「フィルタリング」を行う方法
それではここからは、実際にWiresharkで各種フィルタリングを行う方法について解説を行います。
ただ、フィルタリングと言っても「○○のIPアドレスの機器の通信をすべて取得したい」とか「httpで通信しているパケットすべてを見たい」など、設定したいフィルタリングは様々だと思います。
ここでは良く使いそうな「IPアドレス指定」「ポート番号指定」「プロトコル指定」の3つのフィルタリングの方法についてまとめます。
①IPアドレスでフィルタリング
まずはIPアドレスでフィルタリングを行う方法です。
こちらの方法では「送信元IPアドレス」と「宛先IPアドレス」の両方をフィルタ条件にすることも出来ますし、少し構文を変えれば「送信元IPアドレスが××の場合」などという風に個別でのフィルタリングも可能です。
手順① 画面上部にIPアドレスを入れて矢印ボタンを押し、パケットキャプチャを開始する
IPアドレスでフィルタリングを行う場合、上記画像のように「フィルタ用の構文を入力」→「右側の矢印マークをクリック」→「パケットキャプチャを開始」を行ってください。
IPアドレスの検索では、下記の構文を使用すれば「送信元IPアドレスor宛先IPアドレス」、「送信元IPアドレス」、「宛先IPアドレス」のそれぞれでフィルタリングを行うことが出来ます。
構文 | 説明 |
ip.addr == 192.0.2.1 | 送信元IPアドレス・宛先IPアドレスどちらかでフィルタを行う |
ip.src == 192.0.2.1 | 送信元IPアドレスでフィルタを行う |
ip.dst == 192.0.2.1 | 宛先IPアドレスでフィルタを行う |
上記の画像では「ip.src == 192.168.1.1」と指定しているので、「送信元IPアドレスが192.168.1.1のパケット」のみが表示されています。
画像を見ていただければ分かりますが、Sourceに表示されているIPアドレスが「192.168.1.1」のみになっているのが確認できると思います。
今回試したのは「送信元IPアドレス」ですが、先ほどお伝えした構文を使用すれば「宛先IPアドレス」についても同様にフィルタリングが可能です。
これでIPアドレス指定でフィルタを行う方法は終わりです。
機器別でフィルタを行う場合はIPアドレスで指定することが多いと思うので、やり方を覚えておいて損はないと思います!
②ポートでフィルタリング
次にポート番号指定でフィルタリングを行う方法です。なお、ポート番号でフィルタを行う場合はTCP/UDPも指定する必要があります。
実際の構文は後述しますが、「TCP/UDP」の指定の他に「送信元ポート」か「宛先ポート」なのかも選ぶことが出来たりします。
手順① 画面上部にフィルタリングしたいポート番号を入れて、右側の矢印マークをクリックする
ポート番号でフィルタリングを行う場合、上記画像のように「フィルタ用の構文を入力」→「右側の矢印マークをクリック」→「パケットキャプチャを開始」という手順で操作を行ってください。
なお、フィルタ用の構文については下記の通りです。それぞれTCP/UDPの指定のほかに、送信元ポート番号か宛先ポート番号か等も指定することが可能です。
今回はこの中のうち「tcp.dstport == 80」を選び、送信先ポートが80番のパケットのみ表示するようにします。
構文 | 説明 |
tcp.port == 80 | TCPのポート番号でフィルタを行う |
tcp.srcport == 80 | TCPの送信元ポート番号でフィルタを行う |
tcp.dstport == 80 | TCPの宛先ポート番号でフィルタを行う |
udp.port == 53 | UDPのポート番号でフィルタを行う構文 |
udp.srcport == 53 | UDPの送信元ポート番号でフィルタを行う |
udp.dstport == 53 | UDPの宛先ポート番号でフィルタを行う |
手順② パケットキャプチャを開始すると、指定したポート番号の通信のみ収集される
先ほどの手順でパケットキャプチャを開始して実際にHTTPでの通信を行ってみたところ、下記のような画面が出てきます。
見て分かる通り、宛先ポート番号が80番となっているHTTPでの通信のみがフィルタリングされて表示されています。
これでポート番号指定でフィルタリングを行う方法の解説は終わりです!
個人的にはポート番号指定だと「TCPだけだと思ってたらUDPも使ってた」みたいなこともあるからあんまり使わないかな…。
③プロトコルでフィルタリング
では最後に、プロトコルでのフィルタリングです。こちらは先ほどのポート番号と似ていますが、中にはポート番号が分からなかったり動的になっていたりしてプロトコルでフィルタを行いたいという場合もあると思います。
手順① 画面上部にフィルタリングしたいプロトコルを入れて、右側の矢印マークをクリックする
プロトコルでフィルタを行う場合、上記画像のように「プロトコルを入力」→「右側の矢印マークをクリック」→「パケットキャプチャを開始」という手順で操作を行ってください。
今回の場合はメール送信のプロトコルである「smtp」を入力してみますが、他にも「tcp」「udp」「http」「imap」「dns」なども入れることが出来ます。
手順② パケットキャプチャを開始すると、指定したプロトコルの通信のみ収集される
上記の手順でプロトコルを指定した後、実際にメールを送信してsmtpのパケットが表示されるか試してみました。
実際にメールを送信してみたところ、上記画像の通り、確かにsmtpプロトコルのパケットが画面に表示されているのが分かると思います。
このようにプロトコルでもフィルタリングが行えるので、ポート番号が分からないプロトコルのパケットをフィルタリングしたい場合は非常に便利です。
これでプロトコル指定でのフィルタリングのやり方の説明も終わりです!
僕的にはこちらの方がポート番号指定より間違いが少ないので、どちらかと言えばこちらを使うほうが多いです!
まとめ:Wiresharkでは「検索」や「フィルタリング」が可能
今回の記事ではWiresharkを使用して「検索」や「フィルタリング」を行う方法を解説していきました。
Wiresharkはパケットキャプチャツールとして非常に優秀ですが、どうしても大規模ネットワーク等で使用すると表示されるパケットの数も多くなり、そのままの状態だと目的のパケットを探しだすのに非常に苦労します。
そこで「検索」機能を使用して目的のパケットを探したり、「フィルタリング」機能を使用してIPアドレスやポート番号・プロトコルから目的のパケットのみを抽出したりすることで、より効率的にパケットの調査を行うことが出来るようになります。
この記事ではWiresharkでの「検索」「フィルタリング」のやり方について詳しく解説を行っているので、少しでも参考になったら非常に嬉しいです!