捕获过滤器
我们在使用Wireshark捕获数据包时,对于并不需要分析某个类型的流量,可以使用捕获过滤器来过滤,加速分析过程。具体设置如下:
捕获->选项(快捷键为Ctrl+K)
在捕获过滤器对话框输入表达式: dst 106.39.162.247 ,表示捕获目的IP地址106.39.162.247的流量
0x00:BPF(Berkeley Packet Filter)语法
一个BPF表达式(过滤器)可由一个或多个原语组成,其中原语包含一个或多个限定词,然后跟着一个ID名字或数字。
BPF限定词有:
Type :host、net、port 指出其后数字或名字的意义
Direction:src、dst指出传输方向
Protocol: ether、ip、tcp、udp、http、ftp指出协议
e.g.: dst host 192.168.0.12 && tcp port 80
注:我们使用 (&&、||、! )对原语进行组合
0x01:过滤主机名和地址
根据设备的IPv4、IPv6地址、MAC地址或DNS主机名构造过滤器:对主机IPv4地址相关的流量进行过滤
host 14.215.177.39对主机IPv6地址相关的流量进行过滤
host 2001:4860:4860::8888捕获基于一台设备的主机名的流量
host testserver0对MAC地址进行过滤
ether host 00-1a-a0-52-e2-b7捕获来自某台主机的流量(Direction限定词)
src host 14.215.177.39
PS:若原语中没有Type限定词,默认为host
如src host 14.215.177.39 == src 14.215.177.39
0x02:过滤端口对8080端口进行流量捕获
port 8080捕获除8080端口外所有流量
!port 8080与Direction限定词一起使用
dst port 80
0x03:过滤协议捕获TCP流量
tcp捕获除IPv4外所有流量
!ip4
0x04:过滤协议域
通过检查协议头部中每一字节来构造过滤器,即匹配一个数据包中从某一位置开始一定数量的字节。方法为在协议后输入方括号括起来的字节偏移量,比如icmp[0](ICMP报文类型域位于数据包开头偏移量为0位置)。如果想捕获代表echo请求(类型8)或目标不可达(类型3)的ICMP报文:
icmp[0]==8||icmp[0]==3
对于多字节匹配,在括号中字节偏移量后加上冒号和所需数据字节长度,如捕获类型3代码1(0x0301)的ICMP数据包(目标不可达、主机不可达,为彼此相邻的1字节字段),我们从偏移量0开始捕获相邻的2字节即可,与0x0301比较:
icmp[0:2]==0x0301
对于字节中某一比特位进行匹配,先将整个字节与一个数字进行位运算再匹配,如捕获TCP报文中标志位RST标志为1的报文,标志位在数据包偏移量13字节后,RST位于第6位,则进行位运算的数字为0000 0100B=4(将一个8位2进制数第6位取1,其他7位取0,然后再转化为十进制,进行位运算后,如果RST位为1,则结果为4,如果RST位为0,则结果为0),表达式为:
标志位为1:tcp[13]&4==4 标志位为0:tcp[13]&4==0
同理,对于其他标志位:
标志位为1 标志位为0
URG:tcp[13]&32==32tcp[13]&32==0
ACK:tcp[13]&16==16tcp[13]&16==0
PSH:tcp[13]&8==8tcp[13]&8==0
RST:tcp[13]&4==4tcp[13]&4==0
SYN:tcp[13]&2==2tcp[13]&2==0
FIN:tcp[13]&1==1tcp[13]&1==0
注:TCP报文第13字节比特位:空 空 URG ACK PSH RST SYN FIN
tcp[13]==18表示SYN-ACK数据包(18=0001 0010B)
显示过滤器
对于捕获的pcapng文件,输入显示过滤器来显示符合过滤条件的数据包。我们可以直接在对话框输入表达式或显示过滤器表达式手动选择自动生成。
常用的显示过滤器:
ip.addr==192.1680.1只显示地址为192.1680.1的流量
!tcp.port==3398排除RDP流量
tcp.flags.syn==1具有SYN标志位的TCP数据包
tcp/flags.rst==1具有RST标志位的TCP数据包
!arp排除ARP流量
tcp所以TCP流量
smtp||pop|imap文本email流量
frame.len<=128显示长度小于128字节的数据包
注:多个过滤器之间用and、or、xor、not合并成一个语句