【Wireshark】よく使用するキャプチャフィルタ

Wireshark

Wiresharkで、パケットキャプチャデータを参照する際、膨大なパケットの中から、特定条件のパケットを抽出してから解析をする場合があります。WireSharkでは、様々な条件でフィルタ設定が可能です。

この記事では、WireSharkを使用する上で、よく使用するフィルタ条件やカラムのカスタマイズについてまとめます。

スポンサーリンク
  1. 表示カラムの変更
  2. 組み合わせ・除外条件
    1. AND条件( && )
    2. OR条件( || )
    3. 除外( ! )
  3. MACアドレス
    1. 送信元 または 宛先のMACアドレス(eth.addr)
    2. 送信元MACアドレス(eth.src)
    3. 宛先MACアドレス(eth.dst)
    4. 特定のベンダーのMACアドレス
    5. 宛先MACアドレスがブロードキャスト もしくは マルチキャスト(eth.ig)
    6. 宛先MACアドレスがマルチキャストのみ
  4. IPアドレス
    1. アドレスを用いたフィルタ
      1. 送信元 もしくは 宛先IPアドレス(ip.addr)
      2. 送信元IPアドレス(ip.src)
      3. 宛先IPアドレス(ip.dst)
      4. 送信元 もしくは 宛先IPセグメント(ip.addr)
      5. 送信元IPセグメント(ip.src)
      6. 宛先IPセグメント(ip.dst)
    2. フラグを用いたフィルタ
      1. DFビット(ip.flags.df)
  5. ARP
    1. ARPパケット(arp)
    2. ARP Request(arp.opcode == 1)
    3. ARP Reply(arp.opcode == 2)
  6. ICMP
    1. ICMP全般(icmp)
    2. Echo Request
    3. Echo Reply
    4. Time to Live exceeded
    5. Fragmentation Needed and Don’t Fragment
  7. TCP
    1. TCP通信すべて(tcp)
    2. ポート番号を用いたフィルタ
      1. TCP送信元 もしくは 宛先ポート(tcp.port)
      2. TCP送信元ポート(tcp.srcport)
      3. TCP宛先ポート(tcp.dstport)
      4. TCPの動的ポート範囲
    3. MSS(Maximum Segment Size)
      1. MSSがセット
      2. MSSの値の条件
    4. フラグを用いたフィルタ
      1. SYNフラグがセット
      2. SYNフラグのみセット
      3. SYNフラグを含まない
      4. ACKフラグがセット
      5. ACKフラグのみセット
      6. ACKを含まない
      7. SYNとACKのフラグがセット
      8. FINフラグがセット
      9. RSTフラグがセット
    5. TCPシーケンス
      1. TCP Analysis
      2. TCP ZeroWindow
      3. TCP Window Update
      4. TCP DupACK
      5. TCP Fast Retransmission
      6. TCP Retransmission
      7. TCPセグメンテーション
      8. TCPシーケンス疑義
  8. UDP
    1. UDP通信すべて
    2. ポート番号を用いたフィルタ
      1. UDP送信元 または 宛先ポート(udp.port)
      2. UDP送信元ポート(udp.srcport)
      3. UDP宛先ポート(udp.dstport)
  9. DNS
    1. DNS通信すべて
    2. DNSクエリー
    3. DNSレスポンス
    4. トランザクションID
    5. DNSレスポンス内の名前
    6. DNSの応答時間
  10. HTTP
    1. HTTP通信すべて
    2. HTTPリクエスト
    3. メソッド
    4. 接続先ホスト
    5. HTTPレスポンス
  11. TLS
    1. TLS通信すべて
    2. TLS ハンドシェイク
    3. 接続先サーバ

表示カラムの変更

デフォルトでは、下記のようなカラム構成です。(No/Time/Source/Destination/Protocol/Length/Info

このカラムをカスタマイズすることができます。

例えば、TCP通信の送信元ポートをカラムに追加するとします。まず、このパケットの詳細より、カラムの追加したいフィールドを選択後、右クリックし、Apply  as Column をクリックします。

すると下記のように、カラムが追加されます。

ドラッグアンドドロップ場所の変更もできます。

以降のフィルタ例では、あらかじめ、フィルタ対象のカラムを表示するよう変更しています。

キャプチャデータに対して、キャプチャフィルタの入力スペースに検索条件を入れることで、表示内容をフィルタすることができます。

スポンサーリンク

組み合わせ・除外条件

AND条件( && )

複数フィルタをAND条件にするには、&&  を使用します。

送信元IPアドレス192.168.3.5 かつ、TCPの宛先ポートが443のパケットをフィルタする場合

(ip.src == 192.168.3.5) && (tcp.dstport == 443)

OR条件( || )

複数フィルタをOR条件にするには、|| を使用します。

送信元IPアドレス192.168.3.5  もしくは TCPの宛先ポートが443のパケットをフィルタする場合

(ip.src == 192.168.3.5) || (tcp.dstport == 443)

除外( ! )

特定の条件を除外したい場合は、条件の前に ! をつけます。

送信元IPアドレスが192.168.3.5でないパケットをフィルタする場合

!(ip.src == 192.168.3.5)

スポンサーリンク

MACアドレス

送信元 または 宛先のMACアドレス(eth.addr)

送信元、または、宛先のMACアドレスが、6c:96:cf:e0:86:dfのパケットをフィルタする場合

eth.addr == 6c:96:cf:e0:86:df

送信元MACアドレス(eth.src)

送信元のMACアドレス6c:96:cf:e0:86:dfのパケットをフィルタする場合

eth.src == 6c:96:cf:e0:86:df

宛先MACアドレス(eth.dst)

宛先のMACアドレス6c:96:cf:e0:86:dfのパケットをフィルタする場合

eth.dst == 6c:96:cf:e0:86:df

特定のベンダーのMACアドレス

送信元のMACアドレスのベンダApple, Inc.(6c:96:cf)のパケットをフィルタする場合

eth.src[0:3]==6c:96:cf

宛先MACアドレスがブロードキャスト もしくは マルチキャスト(eth.ig)

MACアドレスの先頭から8ビット目をI/Gビットといい、このビットが1であると、ブロードキャストもしくは、マルチキャストアドレスとなります。

詳細は下記の記事を参考にしてください。

  >> 参考記事 :  【マルチキャスト】MACアドレスへのマッピング

eth.ig == 1

宛先MACアドレスがマルチキャストのみ

宛先MACアドレスで、マルチキャストアドレスのみをフィルタしたい場合は、I/Gビットが1であるうち、ブロードキャストアドレス(ff:ff:ff:ff:ff:ff)を省きます

(eth.ig == 1) && !(eth.dst==ff:ff:ff:ff:ff:ff)

IPアドレス

アドレスを用いたフィルタ

送信元 もしくは 宛先IPアドレス(ip.addr)

送信元、または、宛先のIPアドレスが、192.168.3.5のパケットをフィルタする場合

ip.addr == 192.168.3.5

送信元IPアドレス(ip.src)

送信元IPアドレスが192.168.3.5のパケットをフィルタする場合

ip.src == 192.168.3.5

宛先IPアドレス(ip.dst)

宛先IPアドレスが192.168.3.5のパケットをフィルタする場合

ip.dst == 192.168.3.5

送信元 もしくは 宛先IPセグメント(ip.addr)

送信元、または、宛先のIPセグメントが、 172.217.0.0/19のパケットをフィルタする場合

ip.addr == 172.217.0.0/19

送信元IPセグメント(ip.src)

送信元IPセグメントが、 172.217.0.0/19のパケットをフィルタする場合

ip.src == 172.217.0.0/19

宛先IPセグメント(ip.dst)

宛先IPセグメントが、 172.217.0.0/19のパケットをフィルタする場合

ip.dst == 172.217.0.0/19

フラグを用いたフィルタ

DFビット(ip.flags.df)

IPパケットのDF(Don’t Fragment) ビットがセットされているパケットをフィルタ。DFビットがセットされているパケットはフラグメント化が禁止されています。

ip.flags.df == 1

ARP

セグメント内で、接続先IPアドレスのMACアドレスを取得するのに、ARP(Address Resolution Protocol アドレス解決プロトコル)が使用されます。

ARPには、リクエストとリプライがあり、詳細は、下記の記事を参考にしてください。

  >> 参考記事 :  【初心者わかりやすく】ARP(アドレス解決プロトコル)を詳細に解説

ARPパケット(arp)

ARP全般(リクエストとリプライ)をフィルタする場合

arp

ARP Request(arp.opcode == 1)

arp.opcode == 1

ARP Reply(arp.opcode == 2)

arp.opcode == 2

ICMP

ICMP(インターネット制御メッセージプロトコル)は、ネットワークの診断や管理に使用されるプロトコルです。ICMPの種別はタイプとコードにより分別されます。詳細は下記の記事を参考にしてください。

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

ICMP全般(icmp)

icmp

Echo Request

(icmp.type==8) && (icmp.code==0)

Echo Reply

(icmp.type==0) && (icmp.code==0)

Time to Live exceeded

(icmp.type==11) && (icmp.code==0)

Fragmentation Needed and Don’t Fragment

(icmp.type==3) && (icmp.code==4)

TCP

TCPでは、通信開始前の3 way ハンドシェイクACKによる受信確認パケット再送などにより、信頼性を確保した通信プロトコルです。

TCPの詳細は、下記の記事も参考にしてください。

  >> 参考記事 :  【初心者わかりやすく】TCP通信の確立と終了シーケンス
  >> 参考記事 :  【トラブルシューティング】TCP状態遷移の解説
  >> 参考記事 :  【TCP】シーケンス番号とACK番号について解説

TCP通信すべて(tcp)

tcp

ポート番号を用いたフィルタ

TCP送信元 もしくは 宛先ポート(tcp.port)

送信元 または 宛先のTCPポートが443のパケットをフィルタする場合

tcp.port == 443

TCP送信元ポート(tcp.srcport)

送信元TCPポートが443のパケットをフィルタする場合

tcp.srcport ==443

TCP宛先ポート(tcp.dstport)

宛先TCPポートが443のパケットをフィルタする場合

tcp.dstport == 443

TCPの動的ポート範囲

TCP送信元ポートが動的ポート範囲(49152〜65535)のパケットをフィルタする場合

(tcp.srcport >= 49152) && (tcp.srcport <= 65535)

MSS(Maximum Segment Size)

MSSがセット

MSS(Maximum Segment Size)は、TCPヘッダを除くデータ部分の最大サイズで、デバイス間で、TCPセッション確立時に、最大サイズを決定します。

tcp.options.mss

MSSの値の条件

MSSの値が1460バイト以上のパケットをフィルタする場合

tcp.options.mss_val >=1460

フラグを用いたフィルタ

SYNフラグがセット

tcp.flags.syn==1

SYNフラグのみセット

tcp.flags == 0x0002

SYNフラグを含まない

tcp.flags.syn==0

ACKフラグがセット

tcp.flags.ack==1

ACKフラグのみセット

tcp.flags==0x010

ACKを含まない

tcp.flags.ack==0

SYNとACKのフラグがセット

tcp.flags.syn==1 && tcp.flags.ack==1

FINフラグがセット

tcp.flags.fin == 1

RSTフラグがセット

tcp.flags.reset == 1

TCPシーケンス

TCP Analysis

TCP Analysisでは、WireSharkがTCPのシーケンス番号とACK番号を追跡し、シーケンス上、問題があるなど、注意すべきパケットには、flagsがセットされます

tcp.analysis.flags

TCP ZeroWindow

データ受信側がこれ以上のデータを受信できないことを送信側に通知する際に、RSTはセットせずに、Windowsサイズをゼロとして送信するパケット

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

tcp.analysis.zero_window

TCP Window Update

データ受信側が、TCP ZeroWindow状態から回復し、データを受け取れるようになった場合に送信されたパケット

tcp.analysis.window_update

TCP DupACK

過去、同じACK番号を送っている場合TCP Dup ACKと表示されます。主にパケットドロップにより再送されていることが多いです。

tcp.analysis.duplicate_ack

TCP Fast Retransmission

データ送信側がデータ受信者からTCP DupAckを3回受信した場合に、データ送信側はパケットロスの可能性が高いと判断し、再送タイムアウトを待たずに、パケットを再送(高速リカバリ)します。

tcp.analysis.fast_retransmission

TCP Retransmission

データ受信側からのACKを受信せず、再送タイムアウト後の再送されたパケット

tcp.analysis.retransmission

TCPセグメンテーション

データ送信側がMSSより大きなデータを送信する際に、最大MSSサイズ毎にデータ分割(TCPセグメンテーション)します。下記のとおり、セグメンテーションされたパケットは受信側で、統合されます。

tcp.reassembled.data

TCPシーケンス疑義

TCP Analysisフラグがセットされているうち、window_updateを省き、TCPシーケンス上、疑義なパケットのみをフィルタする場合

(tcp.analysis.flags) && !(tcp.analysis.window_update)

UDP

コネクションレス型のプロトコルであることから、TCPに比べると再送など、信頼性は確保せず、軽量、高速に通信処理します。

UDP通信すべて

udp

ポート番号を用いたフィルタ

UDP送信元 または 宛先ポート(udp.port)

送信元 または 宛先のUDPポートが53のパケットをフィルタする場合

udp.port == 53

UDP送信元ポート(udp.srcport)

UDP送信元ポートが53のパケットをフィルタする場合

udp.srcport == 53

UDP宛先ポート(udp.dstport)

UDP宛先ポートが53のパケットをフィルタする場合

udp.dstport == 53

DNS

名前解決のことで、ホスト名とIPアドレスを相互に変換するプロトコル。名前解決をしたいホスト名について、DNSクライアントがDNSサーバにクエリーを送信し、DNSサーバが解決結果をレスポンスします。

DNS通信すべて

dns

DNSクエリー

DNSクライアントからDNSサーバへのクエリーをフィルタする場合

dns.flags.response == 0

DNSレスポンス

DNSサーバからDNSクライアントへのレスポンスをフィルタする場合

dns.flags.response == 1

トランザクションID

特定のDNSクエリーとレスポンスのペアのみ表示したい場合、Transaction IDによりフィルタします。

フィルタ対象のDNSクエリーのTransaction IDを右クリックし、Apply as Filter >> Selected をクリックします。

このTransaction IDに関するDNSクエリーとレスポンスのみがフィルタされます。

DNSレスポンス内の名前

www.yahoo.co.jp に関してのレスポンスをフィルタする場合

dns.resp.name == www.yahoo.co.jp

DNSの応答時間

接続が遅い場合、DNSレスポンスが遅延している可能性があります。任意のDNSレスポンスから、Timeをカラムに追加します。

下記のように、クエリーに対するレスポンスタイム(単位:秒)が表示されます。

例えば、www.yahoo.co.jp のレスポンス時間を確認します。約24msで応答があったことが確認できます。

HTTP

Webサーバとブラウザの間で、情報をやりとりするためのプロトコル。ブラウザからHTTPリクエストを送信し、Webサーバからレスポンスが返されます。

HTTP通信すべて

http

HTTPリクエスト

http.request

SSDP(Simple Service Discovery Protocol)のUDP1900番もHTTPリクエストとして抽出されます。SSDPを省くには、下記のとおりフィルタします。

(http.request) and !(udp.port eq 1900)

メソッド

リクエストのうち、GETメソッドのパケットをフィルタする場合

http.request.method == GET

接続先ホスト

HTTPパケットを観察する場合、どのホストへ接続しているのか、表示できると便利です。任意のリクエストから、HTTPヘッダ内のHostをカラムに追加します。

接続先のホストがカラムに追加されます。

特定のホストのみフィルタ、例えば、www.yahoo.co.jpのみフィルタする場合

http.host == www.yahoo.co.jp

HTTPレスポンス

http.response

レスポンスコードが200のパケットをフィルタする場合

http.response.code == 200

TLS

Transport Layer Security で、HTTPSで使用します。HTTPのリクエストやレスポンスの内容は暗号化されます。

TLS通信すべて

tls

TLS ハンドシェイク

TLSのハンドシェイクで、Client Helloをフィルタする場合

tls.handshake.type == 1

接続先サーバ

TLSパケットを観察する場合、どのホスト(サーバ)へ接続しているのか、表示できると便利です。任意のClient Helloから、TLSヘッダ内のServer Nameをカラムに追加します。

接続先のホスト(サーバ)がカラムに追加されます。

特定のサーバのみフィルタしたい場合

tls.handshake.extensions_server_name == www.yahoo.co.jp

HTTPとHTTPSが混在する環境で、どのホストやサーバへ接続をしているのか、確認するには、下記のようにフィルタします。

(http.request or ssl.handshake.type == 1 ) and !(udp.port eq 1900)

コメント

タイトルとURLをコピーしました