抓包过滤器的语法格式为:[协议类型限定词] [方向限定词] 类型限定词 具体的值

协议类型限定词与方向限定词表示可选,各部分之间用空格隔开,都要小写,不能大写,如果没有指明协议类型,默认为捕捉所有支持的协议

抓包过滤器,是第一层过滤器。在开始抓包之前,就设置好抓包过滤器的条件,然后只抓取符合条件的数据包。不满足条件的数据包一律不抓。通过抓包过滤器,只让WireShark从网络中抓取自己想要的、或特定的数据包,而并非全部的数据包。抓包过滤器的条件(即条件表达式)采用的语法,来自与 LibPCap/WinPCap库中的tcpdump(命令)的语法.

ether

用来指定要过滤的是第2层的以太网数据帧Frame

不能直接用它,否则会报错,如下图。

wireshark 表达式 wireshark规则的基本格式_IP

ether host MAC地址

表示只抓取源或目的MAC地址为该MAC地址的数据帧

arp

用来指定要过滤的是第3层的ARP帧

ip或ip6

用来指定要过滤的是第3层的IP协议数据包Packet

icmp

用来指定要过滤的是第3层的ICMP协议数据包Packet

tcp

用来指定要过滤的是第4层的TCP协议数据段Segment

udp

用来指定要过滤的是第4层的UDP协议数据段Segment

如果没指明方向,默认使用“srcordst”作为关键字,进、出两个方向上的数据包都抓

src[2]

用来指定要过滤的是数据包的来源地址,比如:来源MAC地址、来源IP地址、来源端口号

过滤来源MAC地址必须要加上第2层的协议关键字,如下图,ether,host也可省略

wireshark 表达式 wireshark规则的基本格式_wireshark 表达式_02

过滤来源IP地址

ip src host 192.168.2.119

过滤端口号,如下图所示

wireshark 表达式 wireshark规则的基本格式_tcp/ip_03

因为端口号属于TCP协议所以也可以使用tcp scr port端口号来抓包

dst

指定要过滤的是数据包的目标地址,比如:目的MAC地址、目的IP地址、目的端口号,凡是可以用src的地方,都可以用dst,只不过,抓的是方向相反的数据包

如果没指明具体的标识符,默认使用host关键字,src192.168.2.119与srchost192.168.2.119相同

host IP地址

net 网络号

用来过滤指定网络中的数据包,网络的指定方法有两种:192.168.2、192.168.2.0/24

port 端口号

用来指定需要过滤的数据包的端口号

portrange 端口范围

用来指定需要过滤的数据包的端口范围

抓取的整个数据包的长度

len <= 20

less 20

greater = 20

ether host MAC地址

根据第2层的MAC地址来过滤数据帧

没有加方向限定词src/dst表示2个方向上的数据帧都抓

ether src host MAC 地址 

加方向限定词src,表示只抓源MAC是指定MAC地址的数据帧

ether dst host MAC地址

加方向限定词dst,表示只抓目的MAC是指定MAC地址的数据帧

ether broadcast广播过滤器

WireShark只抓取所有以太网广播流量,也可用ether dst ff:ff:ff:ff:ff:ff

ether multicast多播过滤器

让WireShark只抓取所有以太网多播流量

etherproto上层协议类型编号根据在以太网帧中封装的上层协议类型编号进行过滤,上层协议类型,即网络层中的协议类型,有IPv4、IPv6、ARP等

vlan vlan编号

VLAN过滤器,让Wireshark只抓取由标识符vlan编号所指定的VLAN的流量

反向抓包

要想让抓包过滤器的条件表达式起反作用,需在原词之前添加关键字not或符号!

host IP地址/网站域名

根据第3层的IP地址来过滤数据包

src host IP地址

加方向限定词src,那表示只抓源IP是指定IP地址的数据包

dst host IP地址

加方向限定词dst,那表示只抓目的IP是指定IP地址的数据包

dst host IP地址

加方向限定词dst,那表示只抓目的IP是指定IP地址的数据包

net 网络号

没有加方向限定词src/dst,那表示 2个方向上 的数据包都抓

src net 网络号

加方向限定词src,那表示只抓源IP所在的网络号是指定的网络号的数据包

dst net 网络号

加方向限定词dst,那表示只抓目的IP所在的网络号是指定的网络号的数据包

broadcast

那表示只抓IP广播包

multicast

那表示只抓IP多播包

ip proto上层协议类型编号

根据在IP数据包中封装的上层协议类型编号进行过滤,上层协议类型,即传输层中的协议类型,有TC协议[6]、UDP协议[17],还有在网络层中的一个ICM协议[1]等

icmp [icmptype] == 值

让WireShark只抓取指定类型[icmptype]的ICMP数据包

gateway IP地址

只抓取穿过host的流量

icmp [icmptype] == icmp-echo

icmp [icmptype] == 8

src port 端口号

加方向限定词src,那表示只抓指定源端口号的数据包

dst port 端口号

加方向限定词dst,那表示只抓指定目的端口号的数据包

portrange port1-port2

没有加方向限定词src/dst,那表示2个方向上 的数据包都抓

src portrange port1-port2

加方向限定词src,那表示只抓指定源端口号范围的数据包

dst portrange port1-port2

加方向限定词dst,那表示只抓指定目的端口号范围的数据包

ip[2:2] ==/<=/>= 某个具体的值

ip[8] ==/<=/>= 某个具体的值

上层协议类型,即传输层中的协议类型,有TCP协议[6] 、UDP协议[17],还有在网络层中的一个ICMP协议[1]等。

tcp [2:2] >= 50 and tcp [2:2] <= 100

抓取目的端口范围在500-100之间的TCP数据包

等价于:tcp dst portrange 50-100

tcp [14:2] < 8192

抓取窗口大小小于8192字节的TCP数据包

tcp [tcp flags] = tcp-syn

只抓取TCP协议数据包中的SYN控制位等于1的所有TCP数据包

tcp [tcp flags] = tcp-ack

只抓取TCP协议数据包中的ACK控制位等于1的所有TCP数据包

tcp [tcp flags] & tcp-syn! = 0

抓取TCP协议数据包中的SYN控制位等于1的所有TCP数据包

tcp [tcp flags] & tcp-ack! = 0

抓取TCP协议数据包中的ACK控制位等于1的所有TCP数据包

tcp [tcp flags] & tcp-syn! = 0 and tcp [tcp flags] & tcp-ack! = 0

抓取TCP协议数据包中的SYN控制位等于1、且ACK控制位也等于1的所有TCP数据包。

tcp [tcp flags] & tcp-rst! = 0

抓取TCP协议数据包中的RST控制位等于1的所有TCP数据包

[not]条件表达式1【and|or[not]条件表达式2……】

[!]条件表达式1【&&|||[!]条件表达式2……】

not icmp

抓取除了icmp协议以外的所有数据包

显示过滤器,是第二道过滤器。在抓包完成之后配置。此时,WireShark已经抓到(可能就是已经经过抓包过滤器过滤了的)所有的数据包。但是我们还想在这一堆已经抓到的数据包中,再使用显示过滤器来过滤一次,让WireShark在数据包列表区中只显示我们想要查看或分析的数据包。但请注意:在经过显示过滤器过滤或筛选之后,没有显示出来的数据包,仍然还在数据包文件中,并没有被删除或丢弃,只是没有显示出来而已。

抓包过滤器仅支持协议过滤、显示过滤器既支持协议过滤,也支持内容过滤

可在显示过滤器表达式窗口进行配置如下

wireshark 表达式 wireshark规则的基本格式_wireshark 表达式_04

图 3.3-6

可直接在显示过滤器工作栏如下图所示,输入过滤条件格式

wireshark 表达式 wireshark规则的基本格式_网络_05

也可以在数据包结构区中将数据包中的某个属性值直接选定作为显示过滤器中的过滤条件表达式,下图(图 3.3-8)中所示

wireshark 表达式 wireshark规则的基本格式_tcp/ip_06

若出现了黄色黄色,表示输入的过滤条件表达式的语法没有问题,能过滤,但结果可能会跟预期的结果不一样,只要在过滤条件表达式中,包含了操作符!=,则背景色必然会是黄色,如下图所示

wireshark 表达式 wireshark规则的基本格式_网络_07

显示过滤器的语法:协议名称 、[.该协议的属性 操作符 具体的值]

在显示过滤器的语法中,协议名称和属性之间,用.来隔开;

frame

根据Frame层协议来进行过滤

eth

根据Ethernet层协议来进行过滤

arp

根据网络层的ARP协议来进行过滤

ip或ipv6

根据网络层的IP协议来进行过滤

icmp

根据网络层的ICMP协议来进行过滤

tcp

根据传输层的TCP协议来进行过滤

udp

根据传输层的UDP协议来进行过滤

http

根据应用层的HTTP协议来进行过滤

ftp、ftp-data

根据应用层的FTP协议来进行过滤,ftp只过滤通过TCP端口21传送的包含FTP命令的FTP数据包。

ftp-data只过滤通过TCP端口20或其他端口传送的包含实际的FTP数据的FTP数据包。

dns

根据应用层的DNS协议来进行过滤

oicq

根据应用层的OICQ协议来进行过滤

Frame信息分析如下图所示

wireshark 表达式 wireshark规则的基本格式_tcp/ip_08

frame.time_delta >= 0.02 // 单位是秒

该参数是指当前帧的抓取时间与上一帧的抓取时间在时间上的时间间隔。

frame.time_delta_displayed >= 0.03 //单位是秒

该参数是指当前帧的抓取时间与上一帧的显示时间在时间上的时间间隔

frame.number >= 100 //数据帧(包)的编号

该参数是指当前帧的抓取的顺序编号。

frame.len >= 1000 //数据帧(包)的长度,单位是字节

该参数是指当前帧的长度。

frame.cap_len >= 1000 //数据帧(包)的抓取长度,单位是字节

该参数是指当前帧的抓取(捕获)长度。

frame.marked == true

该参数是指当前帧被做了一个标记(做了一个记号)。

eth.addr == MAC地址

该参数是指数据帧的源MAC地址或目的MAC地址。

eth.src == MAC地址

该参数是指数据帧的源MAC地址。

eth.dst == MAC地址

该参数是指数据帧的目的MAC地址。

eth.type == IP协议的十六进制代码

该参数是指在数据帧的内部,封装的上层协议类型。

ARP头部信息分析如下图所示

wireshark 表达式 wireshark规则的基本格式_IP_09

arp.opcode == 1

过滤ARP请求包

arp.opcode == 2

过滤ARP应答包

arp.src.hw_mac == MAC地址

过滤由指定MAC地址的主机发出去的ARP包

IP头部信息分析如下图所示

wireshark 表达式 wireshark规则的基本格式_网络_10

ip.addr == P地址或IP子网号

该参数是指IP数据包的源IP地址或目的IP地址,过滤IP数据包的源IP地址或目的IP地址等于指定IP地址的所有IP数据包

过滤掉(即不显示)源IP地址和目的IP地址都不是指定IP地址的所有的IP数据包,如下图所示

wireshark 表达式 wireshark规则的基本格式_udp_11

过滤(即只显示)你的电脑和某一个网站(比如百度)之间所有的IP数据包,如下图所示

wireshark 表达式 wireshark规则的基本格式_udp_12

过滤(即只显示)你的电脑发送到某一个网站(比如百度)所有的IP数据包,如下图所示

wireshark 表达式 wireshark规则的基本格式_wireshark 表达式_13

过滤(即只显示)某一个网站(比如百度)发送到你的电脑所有的IP数据包,如下图所示

wireshark 表达式 wireshark规则的基本格式_IP_14

ip.src == IP地址或IP子网号

该参数是指IP数据包的源IP地址。

过滤IP数据包的源IP地址等于指定IP地址的所有数据包

ip.dst == IP地址或IP子网号

该参数是指IP数据包的目的IP地址。

过滤IP数据包的目的IP地址等于指定IP地址的所有数据包

ip.ttl == 某个值

该参数是指IP数据包的TTL值。

过滤IP数据包的TTL值大于n的所有数据包

ip.ttl > n

ip.len == 某个值

该参数是指IP数据包的长度。

ip.version == 4/6

该参数是指IP数据包的版本号。

ICMP头部信息分析如下图所示

wireshark 表达式 wireshark规则的基本格式_网络_15

icmp.type == 报文类型

报文类型分为回显请求报文、回显响应报文;其中,回显请求报文的值为 8 回显 响应报文的值为0

过滤ICMP 回显请求报文数据包

icmp.type == 8

过滤ICMP 回显 响应报文数据包

icmp.type == 0

过滤在执行ping命令期间,产生的所有ICMP数据包

icmp.type == 0 or icmp.type == 8

TCP头部信息分析如下图所示

wireshark 表达式 wireshark规则的基本格式_wireshark 表达式_16

tcp.por == 端口号

该参数是指TCP数据包的源端口或目的端口

过滤(即只显示)你的电脑访问所有网页的所有流量(TCP数据包)

(ip.addr == 192.168.2.119) && (tcp.port == 80)

tcp.srcport == 端口号

该参数是指TCP数据包的源端口。过滤源端口等于80的所有TCP数据包

tcp.dstport == 端口号

该参数是指TCP数据包的目的端口

过滤本机访问DNS服务器的所有流量

ip.scr == 192.168.2.119 && udp.dstport == 80

过滤本机访问 HTTP服务器的所有流量

ip.scr == 192.168.2.119 && tcp.dstport == 80

tcp.flags.syn == 1

过滤SYN控制位设置为1的所有TCP数据包

tcp.flags.ack == 1

过滤ACK控制位设置为1的所有TCP数据包

tcp.flags.reset == 1

过滤RST控制位设置为1的所有TCP数据包

tcp.flags.fin == 1

过滤FIN控制位设置为 1的所有TCP数据包

tcp.window_size_value <某个窗口大小的值

过滤窗口大小小于值的所有TCP数据包

tcp.analysis.retransmission

过滤所有重传的TCP数据包

tcp.analysis.duplicate_ack[2]

过滤所有重复确认(即确认多次)的TCP数据包,如下图所示

wireshark 表达式 wireshark规则的基本格式_IP_17

tcp.analysis.zero_window

过滤所有零窗口的TCP数据包

tcp.analysis.window_full

过滤所有携带 滑动窗口达到上限window_full 的TCP数据包

tcp.analysis.ack_rtt > 0.2

该参数是用来过滤超过200毫秒的确认数据包

tcp.stream == 1

过滤TCP会话号为1的所有TCP数据包

tcp.stream == 438 && tcp.analysis.retransmission

过滤在某次完整的TCP连接或TCP会话中发生重传的所有TCP数据包

tcp.stream == 67 && tcp.analysis.zero_window

过滤在某条特定的TCP连接或TCP会话中所有零窗口的TCP数据包

tcp.stream == 63 && tcp.analysis.window_full

过滤在某条特定的TCP连接或TCP会话中所有携带滑动窗口达到上限window_full 的TCP数据包

UDP头部信息分析如下图所示

wireshark 表达式 wireshark规则的基本格式_wireshark 表达式_18

过滤访问 www.baidu.com 网站的所有数据包

http.host == “www.baidu.com”

过滤访问包含有baidu域名的所有数据包

http.host contains “baidu”

过滤访问匹配以.com域名结尾的所有数据包

http.host matches “\.com”

过滤使用GET方法提交数据的所有数据包

http.request.method == “GET”

过滤包含 login 登录页面的所有数据包

http.request.uri contains “login”

过滤客户端发给某网站的带有 cookie 请求的所有数据包

http.cookie and ip.dst == 192.168.2.119

过滤某网站发给客户端的带有 cookie set 命令的所有数据包

http.set_cookie

DNS头部信息分析如下图所示

wireshark 表达式 wireshark规则的基本格式_IP_19

过滤所有的DNS查询数据包

dns.flags.response == 0

过滤所有的DNS响应数据包

dns.flags.response == 1

通层层过滤来选择出自己所需要的数据包,并对数据包进行分析[2]