はじめに
Wiresharkのフィルタを調べるのも効率が悪いので、自分がよく使うフィルタをまとめておきます。
フィルタ条件
IPアドレス関連
特定のIPアドレスに関連する全ての通信を表示する
ip.addr == 10.0.0.1
サブネット全体に対するトラフィックを表示する
ip.addr == 10.0.0.0/24
特定の送信元と宛先間の通信のみを表示する
ip.src == 10.0.0.1 && ip.dst == 10.0.0.2
!(ip.addr == 10.0.0.1)
TCP関連
特定のポート番号のパケットを表示する(送信元/宛先は問わない)
tcp.port == 80
特定の宛先ポート番号のパケットを表示する
tcp.dstport == 23
特定の送信元ポート範囲のトラフィックを表示する
tcp.srcport < 1000
SYNフラグがセットされたTCPパケットを表示する
tcp.flags.syn == 1
ACKフラグがセットされたTCPパケットを表示する
tcp.flags.ack == 0
SYNとACKフラグがセットされたTCPパケットを表示する
tcp.flags.syn == 1 and tcp.flags.ack == 1 または tcp.flags == 0x012
Bad TCP関連
多重ACKを表示する
tcp.analysis.duplicate_ack
再送されたパケットを表示する
※タイムアウトによる再送パケットです。
tcp.analysis.retransmission
高速再送パケットを表示する
※タイムアウトを待たずに再送されたパケットです。
tcp.analysis.fast_retransmission
不正確な順序で届いたパケットを表示する
tcp.analysis.out_of_order
Bad TCPを消し去る
!tcp.analysis.duplicate_ack and !tcp.analysis.retransmission and !tcp.analysis.out_of_order
HTTP関連
全てのHTTPリクエストを表示する
http.request
HTTPのリクエストでフィルタする
# GETメソッド http.request.method == "GET" # HEADメソッド http.request.method == "HEAD" # POSTメソッド http.request.method == "POST" # PUTメソッド http.request.method == "PUT" # DELETEメソッド http.request.method == "DELETE" # CONNECTメソッド http.request.method == "CONNECT" # OPTIONSメソッド http.request.method == "OPTIONS" # TRACEメソッド http.request.method == "TRACE" # PATCHメソッド http.request.method == "PATCH"
HTTPレスポンスコードでフィルタする
# OK http.response.code == 200 # Moved Permanently http.response.code == 301 # Not Modified http.response.code == 304 # Unauthorized http.response.code == 401 # Forbidden http.response.code == 403 # Not Found http.response.code == 404 # Too Many Requests http.response.code == 429 # Bad Gateway http.response.code == 502 # Service Unavailable http.response.code == 503 # Gateway Timeout http.response.code == 504
特定のホストへのHTTPトラフィックを表示する
http.host == "www.example.com"
# 完全一致 http.request.uri == "/example/path" # 部分一致 http.request.uri contains "/example/path" # ホスト名とURIの組み合わせ http.host == "example.com" and http.request.uri contains "/example/path"
HTTPリクエストまたはSSLハンドシェイクのClient Helloパケットを表示する
http.request or ssl.handshake.type == 1
TLS関連
TLSハンドシェイクパケットを表示する
tls.handshake
TLSハンドシェイク中の「Client Hello」パケットを表示する
tls.handshake.type == 1
フレームサイズおよびキーワード関連
特定のキーワードを含むパケットを表示する
frame contains "keyword"
サイズが1000バイト以上のパケットを表示する
frame.len > 1000
DNS関連
dns.resp.name == "www.example.com"
ICMP関連
ICMPの「宛先到達不能」パケットを表示する
icmp.type == 3
DHCP関連
dhcp and ip.addr == 10.0.0.0/24
特定のMACアドレスのクライアントに対するDHCPパケットを表示する
dhcp.hw.mac_addr == 00:00:5e:ef:10:00:00:00
イーサネットおよびMACアドレス関連
eth.addr == 00:00:5e:ef:10:00:00:00
特定オフセット位置の値に基づいたイーサネットフレームを表示する
eth[0x47:2] == 01:80
その他のフィルタ
tcp or udp
特定のVLAN IDに関連するトラフィックを表示する
vlan.id == 100
http or dns
!(arp or icmp or stp)
演算子
AND条件
tcp.flags.syn == 1 and tcp.flags.ack == 1
OR条件
tcp.port == 80 or tcp.port == 443
NOT条件
not ip.addr == 10.0.0.1 または !(ip.addr == 10.0.0.1)
等しい値を指定する
ip.addr == 192.168.1.1
等しくない値を指定する
tcp.port != 80
指定した値より大きい
frame.len > 1000
指定した値より小さい
frame.len < 1000
指定した値以上
tcp.window_size >= 5000
指定した値以下
tcp.window_size <= 5000
以上
役に立った方はビール1杯奢ってください!