Appearance
wireshark 过滤器
Wireshark 过滤器分为两种,捕获过滤器与显示过滤器。
捕获过滤器:当进行数据包捕获时,只有那些满足给定的包含/排除表达式的数据包会被捕获。
显示过滤器:该过滤器根据指定的表达式用于一个已捕获的数据包集合,它将隐藏不想显示的数据包,或者只显示那些需要的数据包。
捕获过滤器(capture filter)
捕获过滤器可减少抓取文件体积,使用 BPF(Berkeley packet filter) 语法。tcpdump 也同样支持 BPF 语法。
BPF 语法:使用 BPF 语法创建的过滤器被称为 expression(表达式),并且每个表达式包含一个或多个primitives(原语)。每个原语包含一个或多个qualifiers(限定词),然后跟着一个ID 名字或者数字
- BPF 限定词
限定词 | 说明 | 例子 |
---|---|---|
Type | 指出名字或数字所代表的意义 | host、net、port |
Direction | 指明传输方向是前往还是来自名字或数字 | src、dst |
Proto | 限定所要匹配的协议 | Ether、ip、tcp、udp、http、ftp |
表达式结构(expression)
表达式(expression):由多个原语(primitive)组成。
type
- host:双向主机
- port:双向端口
- net:子网 net 192.168.0.0/24
- portrange:端口范围
原语运算符
与:"&&" 或者 "and"
src host 192.168.0.10 && port 80
或:"||" 或者 "or"
非:"!" 或者 "not"
BPF 语法参考
捕获 tcp 协议 源/目的端口范围:
tcp and src or dst portrange 6000-8000
length > 100 数据包:
tcp and src or dst portrange 80-4000 and greater 100
tcpdump BPF 语法参考
抓取端口范围:
tcpdump -i ens38 'tcp and src or dst portrange 6000-8000'
大文件中筛选:
tcpdump -r packets.pcap 'tcp dst port 80' -w http.pcap
指定语法文件:
root@server:~# cat portrange.bpf tcp and src or dst portrange 6000-8000 root@server:~# tcpdump -i ens33 -F portrange.bpf
捕获过滤器高级用法
BPF 语法可以通过检查协议头中的每一个字节来创建基于那些数据的特殊过滤器
字节转换:
1byte == 2 个 16 进制数
1byte == 8 个 bit
二进制:0 0 0 0 0 0 0 0 十进制:128 64 32 16 8 4 2 1
通过偏移值定义过滤器
- 格式:协议[字节位置] == value
示例1:过滤 icmp echo 报文,即协议第1个字节
# icmp 协议第一个字节 == 8 即 echo 报文 icmp[0]==8
示例2:过滤 tcp reset 报文
# tcp 包头第 13 个 byte 是 flag 字段,reset 置位时十进制数 == 4(0100)。 tcp[13]&4==4
常用捕获过滤器
过滤器 | 说明 |
---|---|
tcp[13]&32==32 | 设置了URG 位的TCP 数据包 |
tcp[13]&16==16 | 设置了ACK 位的TCP 数据包 |
tcp[13]&8==8 | 设置了PSH 位的TCP 数据包 |
tcp[13]&4==4 | 设置了RST 位的TCP 数据包 |
tcp[13]&2==2 | 设置了SYN 位的TCP 数据包 |
tcp[13]&1==1 | 设置了FIN 位的TCP 数据包 |
tcp[13]==18 | TCP SYN-ACK 数据包 |
ether host 00:00:00:00:00:00 | 流入或流出你MAC 地址的流量 |
!ether host 00:00:00:00:00:00 | 不流入或流出你MAC 地址的流量 |
broadcast | 仅广播流量 |
icmp | ICMP 流量 |
icmp[0:2] | ICMP 目标不可达、主机不可达 |
ip | 仅IPv4 流量 |
ip6 | 仅IPv6 流量 |
udp | 仅UDP 流量 |
显示过滤器(display filter)
显示过滤器更为强大,数据包详情的每个字段都可以作为筛选条件
- 常用显示过滤器
过滤器 | 说明 |
---|---|
!tcp.port==3389 | 排除RDP 流量 |
tcp.flags.syn==1 | 具有SYN 标志位的TCP 数据包 |
tcp.flags.rst==1 | 具有RST 标志位的TCP 数据包 |
!arp | 排除ARP 流量 |
http | 所有HTTP 流量 |
tcp.port==23 | 文本管理流量(Telnet 或FTP) |
一招打天下
保存显示过滤器(如有特别常用且复杂的显示过滤器,可以加 label保存)