抓包过滤器的语法格式为:[协议类型限定词] [方向限定词] 类型限定词 具体的值
协议类型限定词与方向限定词表示可选,各部分之间用空格隔开,都要小写,不能大写,如果没有指明协议类型,默认为捕捉所有支持的协议
抓包过滤器,是第一层过滤器。在开始抓包之前,就设置好抓包过滤器的条件,然后只抓取符合条件的数据包。不满足条件的数据包一律不抓。通过抓包过滤器,只让WireShark从网络中抓取自己想要的、或特定的数据包,而并非全部的数据包。抓包过滤器的条件(即条件表达式)采用的语法,来自与 LibPCap/WinPCap库中的tcpdump(命令)的语法.
ether
用来指定要过滤的是第2层的以太网数据帧Frame
不能直接用它,否则会报错,如下图。
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也可省略
过滤来源IP地址
ip src host 192.168.2.119
过滤端口号,如下图所示
因为端口号属于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在数据包列表区中只显示我们想要查看或分析的数据包。但请注意:在经过显示过滤器过滤或筛选之后,没有显示出来的数据包,仍然还在数据包文件中,并没有被删除或丢弃,只是没有显示出来而已。
抓包过滤器仅支持协议过滤、显示过滤器既支持协议过滤,也支持内容过滤
可在显示过滤器表达式窗口进行配置如下
图 3.3-6
可直接在显示过滤器工作栏如下图所示,输入过滤条件格式
也可以在数据包结构区中将数据包中的某个属性值直接选定作为显示过滤器中的过滤条件表达式,下图(图 3.3-8)中所示
若出现了黄色黄色,表示输入的过滤条件表达式的语法没有问题,能过滤,但结果可能会跟预期的结果不一样,只要在过滤条件表达式中,包含了操作符!=,则背景色必然会是黄色,如下图所示
显示过滤器的语法:协议名称 、[.该协议的属性 操作符 具体的值]
在显示过滤器的语法中,协议名称和属性之间,用.来隔开;
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信息分析如下图所示
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头部信息分析如下图所示
arp.opcode == 1
过滤ARP请求包
arp.opcode == 2
过滤ARP应答包
arp.src.hw_mac == MAC地址
过滤由指定MAC地址的主机发出去的ARP包
IP头部信息分析如下图所示
ip.addr == P地址或IP子网号
该参数是指IP数据包的源IP地址或目的IP地址,过滤IP数据包的源IP地址或目的IP地址等于指定IP地址的所有IP数据包
过滤掉(即不显示)源IP地址和目的IP地址都不是指定IP地址的所有的IP数据包,如下图所示
过滤(即只显示)你的电脑和某一个网站(比如百度)之间所有的IP数据包,如下图所示
过滤(即只显示)你的电脑发送到某一个网站(比如百度)所有的IP数据包,如下图所示
过滤(即只显示)某一个网站(比如百度)发送到你的电脑所有的IP数据包,如下图所示
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头部信息分析如下图所示
icmp.type == 报文类型
报文类型分为回显请求报文、回显响应报文;其中,回显请求报文的值为 8 回显 响应报文的值为0
过滤ICMP 回显请求报文数据包
icmp.type == 8
过滤ICMP 回显 响应报文数据包
icmp.type == 0
过滤在执行ping命令期间,产生的所有ICMP数据包
icmp.type == 0 or icmp.type == 8
TCP头部信息分析如下图所示
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数据包,如下图所示
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头部信息分析如下图所示
过滤访问 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头部信息分析如下图所示
过滤所有的DNS查询数据包
dns.flags.response == 0
过滤所有的DNS响应数据包
dns.flags.response == 1
通层层过滤来选择出自己所需要的数据包,并对数据包进行分析[2]