おれさまラボ

実際に手を動かして理解を深めるブログ。

Wireshark:フィルタチートシート

はじめに

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アドレスに関連するトラフィックを除外する

!(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"

特定のURIへのHTTPトラフィックを表示する

# 完全一致
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応答を表示する

dns.resp.name == "www.example.com"

ICMP関連

ICMPの「宛先到達不能」パケットを表示する

icmp.type == 3

DHCP関連

特定のサブネットにおける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アドレス関連

特定のMACアドレスに関連するトラフィックを表示する

eth.addr == 00:00:5e:ef:10:00:00:00

特定オフセット位置の値に基づいたイーサネットフレームを表示する

eth[0x47:2] == 01:80

その他のフィルタ

TCPUDPの両方のトラフィックを表示する

tcp or udp

特定のVLAN IDに関連するトラフィックを表示する

vlan.id == 100

HTTPやDNSに関連するトラフィックを表示する

http or dns

背景トラフィックARP、ICMP、STP)を除外する

!(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杯奢ってください!

この続きはcodocで購入