Wireshark显示过滤器常用关键字及过滤表达式
1. 过滤器类型
Wireshark抓包工具提供了两种类型过滤器:抓包过滤器 和 显示过滤器。
- 抓包过滤器: 抓取满足过滤条件的数据包,不满足过滤条件的数据包不会被抓取。
- 显示过滤器: 包已经被抓取到,显示只满足过滤条件的数据包,不满足过滤条件的数据包在后台。
①. 抓包过滤器
Wireshark 抓包工具在抓包过滤时,其过滤语法格式为 BPF
格式。
BPF (全称为Berkeley Packet Filter),翻译过来就是 "伯克利封包过滤器" (或者也称 "柏克莱封包过滤器" )。
抓包过滤器语法包含四个核心元素:类型、方向、协议 和 逻辑运算符。
- 类型Type: 主机(
host
)、网段(net
)、端口(port
); - 方向Dir: 源地址(
src
)、目标地址(dst
); - 协议Protocol: 各种网络协议,比如:
tcp
、udp
、http
; - 逻辑运算符: 与( && )、或( || )、非( !) ;
四个元素可以自由组合。
②. 显示过滤器
显示过滤器在抓包后或者抓包过程中使用。
显示过滤器的语法包含五个核心元素:IP、端口、协议、比较运算符和逻辑运算符。
- IP地址:
ip.addr
、ip.src
、ip.dst
; - 端口:
tcp.port
、tcp.srcport
、tcp.dstport
、udp.port
; - 协议:
arp
、ip
、icmp
、tcp
、udp
、http
、ntp
、ftp
、ftp-data
、snmp
、dns
、hdcp
、modbus
、mysql
; - 比较运算符:
>
、<
、==
、>=
、<=
、!=
; - 逻辑运算符:
and
、or
、not
、xor
、&&
、||
等;
五个元素可以自由组合。
显示过滤器还可以使用 "frame[]" 和 "data[]" 定位帧指定位置内容。
- frame[]: 全域中定位数据(匹配数据);
- data[]: 数据域中定位数据(匹配数据);
2. 常用显示过滤器关键字及其表达式
[1]. IP地址过滤
目标地址过滤
shell
ip.dst == 10.46.21.11
源地址过滤
shell
ip.src == 10.56.1.31
[2]. 端口过滤
UDP
端口过滤
shell
udp.port == 50001
UDP
目标端口过滤
shell
udp.dstport == 4000
UDP
源端口过滤
shell
udp.srcport == 50001
TCP
端口过滤
shell
tcp.port == 2048
TCP
目标端口过滤
shell
tcp.dstport == 512
TCP
源端口过滤
shell
tcp.srcport == 501
[3]. 常用协议过滤
ICMP
协议过滤
shell
icmp
UDP
协议过滤
shell
udp
TCP
协议过滤
shell
tcp
MYSQL
协议过滤
shell
mysql
HTTP
协议过滤
shell
http
[4]. Modbus协议过滤
Modbus
协议过滤
shell
modbus.func_code==0x03
[5]. MySQL协议过滤
MySQL
协议过滤
shell
mysql
[6]. IEC60870-104协议过滤
IEC60870-104
协议过滤
shell
104apci 应用规约控制信息帧
104asdu 应用服务数据单元帧
[7]. 多条件组合过滤
多个条件组合过滤
比如,过滤应用层协议类型为TCP
,目标端口为512,源地址为192.168.58.151
的数据帧,过滤表达式如下:
shell
tcp and tcp.dstport==512 and ip.src==192.168.58.151
[8]. frame[] 全域过滤
A. 单个字节匹配过滤
单个字节数据域匹配过滤
shell
frame[2] == 5e
B. 多个连续字节匹配过滤
多个连续字节数据域匹配过滤(比如 frame[0:6]
: 表示从第0个索引位置开始,匹配连续6个字节 )
shell
frame[0:6] == ff:ff:ff:ff:ff:ff
C. 多个不连续字节匹配过滤
多个不连续字节数据域匹配过滤(比如 frame[0,7,8,11]
: 表示匹配索引位置 0,7,8、11 共四个数据内容)
shell
frame[0,7,8,11] == ff:50:56:08
[9]. data[] 数据域过滤
A. 单个字节匹配过滤
单个字节数据域匹配过滤
shell
data[0] == 90
B. 多个连续字节匹配过滤
多个连续字节数据域匹配过滤(比如 data[0:4]
: 表示从第0个索引位置开始,匹配连续四个字节 )
shell
data[0:4] == 90:eb:03:03
C. 多个不连续字节匹配过滤
多个不连续字节数据域匹配过滤(比如 data[0,1,6]
: 表示匹配索引位置 0,1,6 共三个数据内容)
shell
data[0,1,6] == 90:eb:a7