WireShark 提供两种过滤器,分别是捕获过滤器和显示过滤器。捕获过滤器是进行包捕获时进行过滤,只捕获过滤规则之内的数据包。而显示过滤器是在捕获数据包之后,只显示过滤规则之内的数据包。
捕获过滤器:
捕获过滤器应用于Winpcap,使用Berkeley Packet Filter(BPF)语法。使用BPF创建的过滤器称为表达式,通常一个表达式由一个或多个原语以及零个及以上操作符组成。一个原语往往由一个或多个限定词然后跟一个ID名字或数字组成。一个表达式样例如下:
BPF限定词:
限定词 | 说明 | 例子 |
Type | 指出名字或数字所代表意义 | host、net、port |
Dir | 指明是源还是目的 | src、dst |
Proto | 指明协议 | ip、tcp、udp、ftp |
逻辑操作符:
连接运算符 and &&
选择运算符 or ||
否定运算符 not !
下面详细说明一下各种类型的过滤器。
(1)主机名和地址过滤器
我们可以设置规则根据设备的MAC地址、IPv4地址、IPv6地址或者DNS主机名进行过滤。
举例如下:
如果想捕获与某IPv4地址192.168.3.4相关的所有数据包,可设置如下过滤器:
host 192.168.3.4
如果想捕获与某IPv6地址2001::7334相关的所有数据包,可设置如下过滤器:
host 2001::7334
如果想捕获与某主机名mrbuffoon相关的所有数据包,可设置如下过滤器:
host mrbuffoon
一台主机IP地址可能会变,所以有时需要进行MAC地址过滤,可以设置过滤器:
ether host 00-11-22-33-44-55
想捕获来自某台主机的流量:
src host 192.168.3.4
想捕获目的地址为某主机的流量:
dst host 192.168.3.4
note:如果没有显式指定Type类型,则默认为host。
(2)端口过滤器
举例:
只过滤8080端口流量:
port 8080
(3)协议过滤器
举例:
只捕获icmp协议的数据包
icmp
(4)协议域过滤器
我们可以检查数据包协议头的每一字节来创建基于这些特殊数据的过滤器。
icmp[0]==3表示我们捕获代表目标不可达(类型3)的ICMP报文。
icmp[a:b]这种形式表示我们要检查偏移为a开始的b个字节,例如icmp[0:2]==0x0301表示我们要捕获类型3代码1即目标不可达,主机不可达的ICMP报文。
tcp[a]&b这种形式。常见形式如下:
tcp[13]&32==32
tcp[13]&16==16
tcp[13]&8==8
tcp[13]&4==4
tcp[13]&2==2
tcp[13]&1==1
tcp[13]==18
(5)高级语法过滤器
frame.len<128
显示过滤器过滤语法规则与捕获过滤器是相通的,这里就不再次重复介绍。