在Wireshark中往往会抓到很多数据,这时我们就需要用到过滤器Filter来筛选出我们所关心的数据包。
Wireshark提供了两种过滤器:
- 捕获过滤器:在抓包之前就设定好过滤条件,然后只抓取符合条件的数据包。
- 显示过滤器:在已捕获的数据包集合中设置过滤条件,隐藏不想显示的数据包,只显示符合条件的数据包。
需要注意的是,这两种过滤器所使用的语法是完全不同的,在本篇博文中将介绍捕获过滤器。
使用捕获过滤器的主要原因就是性能。如果你知道并不需要分析某个类型的流量,那么可以简单地使用捕获过滤器过滤掉它,从而节省那些会被用来捕获这些数据包的处理器资源。当处理大量数据的时候,使用捕获过滤器是相当好用的。
新版Wireshark的初始界面非常简洁,主要就提供了两项功能:先设置捕获过滤器,然后再选择负责抓包的网卡。由此可见捕获过滤器的重要性。
比如我们希望只抓取与80端口之间的通信,那么可以设置过滤规则“port 80”。
捕获过滤器应用于Winpcap,并使用Berkeley Packet Filter(BPF)语法,其语法规则如下:
协议 方向 类型 数据 |
- 协议,可能的值:ether、ip、arp、tcp、udp、http、ftp……,如果没有特别指明是什么协议,则默认使用所有支持的协议。
- 方向,可能的值:src、dst,如果没有特别指明来源或目的地,则默认使用“src or dst”作为关键字。例如,“host 10.2.2.2”与“src or dst host 10.2.2.2”是一样的。
- 类型,可能的值:net、port、host,如果没有指定此值,则默认使用”host”关键字。例如,“src 10.1.1.1”与“src host 10.1.1.1”相同。
我们还可以使用以下三种逻辑运算符,对表达式进行组合,从而创建更高级的表达式。
逻辑与&&,逻辑或||,逻辑非! |
比如下面这个表达式,只捕获源地址是192.168.0.10并且源端口或目的端口是80的数据包。
src 192.168.0.10 && port 80 |
应用示例
如果我们希望抓取某台特定主机或设备的数据包,那么可以根据设备的IP地址或MAC地址来设置过滤规则。
比如只抓取IP地址为192.168.0.10的数据包。
host 192.168.0.10 |
如果考虑到主机的IP地址可能会变化,那么可以指定MAC地址进行过滤。
ether host 00-50-56-C0-00-01 |
也可以根据数据的流向来过滤:
src host 192.168.0.10 //从192.168.0.10发出的数据包 dst host 192.168.0.10 //发往192.168.0.10的数据包 ether src host 00-50-56-C0-00-01 //从00-50-56-C0-00-01发出的数据包 ether dst host 00-50-56-C0-00-01 //发往00-50-56-C0-00-01的数据包 |
需要注意的是,host在表达式中是默认选项,因而上面的这几个表达式无论是否加上host都是表达相同含义。
再比如通过端口进行过滤:
port 8080 //只捕获8080端口的流量 !port 8080 //捕获8080端口外的所有流量 dst port 8080 //只捕获前往8080端口的流量 |
通过协议或通信方式进行过滤:
icmp //只捕获ICMP流量 !broadcast //不要抓取广播包 |