Wireshark 的过滤器主要分为两类,用途截然不同,千万别搞混了:
- 捕获过滤器 (Capture Filter) :在开始抓包前设置,决定"抓什么"。它能减少无关数据,节省资源。
- 显示过滤器 (Display Filter) :在抓到包后使用,决定"看什么"。它功能更强大,是日常分析的主力。
下面为你分别介绍它们的核心规则。
🎣 捕获过滤器 (Capture Filter)
它使用 BPF (Berkeley Packet Filter) 语法,规则相对简单。你可以在 Wireshark 主界面的顶部直接输入。
1. 核心语法结构
[协议] [方向] [主机/网络] [逻辑运算符] [端口/值]
2. 常用关键字
- 协议 (Protocol) :
tcp,udp,ip,arp,icmp,http,dns等。 - 方向 (Direction) :
src(源),dst(目标)。如果不指定,则表示源或目标。 - 逻辑运算符 (Logic) :
and,or,not(或!)。
3. 实用示例
- 只抓 TCP 包 :
tcp - 只抓来自或去往 192.168.1.100 的包 :
host 192.168.1.100 - 只抓去往 192.168.1.100 的包 :
dst host 192.168.1.100 - 只抓来自 192.168.1.100 且目标端口是 80 的 TCP 包 :
src host 192.168.1.100 and tcp dst port 80 - 抓取 80 或 443 端口的包 :
port 80 or port 443 - 抓取除了 ARP 之外的所有包 :
not arp
🔍 显示过滤器 (Display Filter)
这是你最常用的过滤器,功能极其强大,可以在抓到包后,在顶部的过滤栏输入表达式,精准筛选。
1. 核心语法结构
字段名 比较运算符 值
2. 常用比较运算符
==(等于)!=(不等于)>(大于)<(小于)>=(大于等于)<=(小于等于)contains(包含,用于字符串或字节序列)matches(正则表达式匹配)
3. 常用逻辑运算符
&&(与)||(或)!(非)
4. 实用示例
- 只显示 TCP 包 :
tcp - 只显示 IP 地址为 192.168.1.100 的包 :
ip.addr == 192.168.1.100 - 只显示源 IP 为 192.168.1.100 的包 :
ip.src == 192.168.1.100 - 只显示目标端口是 80 的 TCP 包 :
tcp.dstport == 80 - 显示 HTTP 协议中包含 "GET" 方法的包 :
http.request.method == "GET" - 显示 TCP 标志位中包含 SYN 的包 (常用于寻找连接请求) :
tcp.flags.syn == 1 - 显示长度大于 100 字节的包 :
frame.len > 100 - 组合查询:显示来自 192.168.1.100 且是 HTTP 协议的包 :
ip.src == 192.168.1.100 && http
💡 小技巧
- 自动补全 :在显示过滤器输入框中输入字段名时,Wireshark 会自动提示,按
Tab键可以补全。 - 右键快捷过滤:在数据包列表中,右键点击任意一个字段(如 IP 地址、端口号),选择 "Apply as Filter" -> "Selected",Wireshark 会自动生成对应的过滤表达式,非常方便。