Wireshark 过滤器命令大汇总:从入门到精通
Wireshark 过滤器命令大汇总:从入门到精通
Wireshark 作为最强大的网络封包分析软件之一,其核心功能之一就是过滤器。面对海量的网络数据,精准的过滤器能帮助我们从“数据海洋”中迅速捞出所需的“针”,极大提升排错和分析效率。本文将系统性地汇总 Wireshark 的两大类过滤器:捕获过滤器和显示过滤器,并提供丰富的实用场景示例。
第一部分:捕获过滤器
捕获过滤器在数据包被抓取之前就进行过滤,只捕获符合条件的数据包,从而节省存储空间和系统资源。其语法源于 Berkeley Packet Filter (BPF)。
基本语法结构: [协议] [方向] [主机] [值] [逻辑运算]
- 协议: 如
ether
,ip
,ip6
,arp
,tcp
,udp
等。如果省略,默认是所有协议。 - 方向:
src
(源),dst
(目的),src or dst
,src and dst
(可省略,默认为src or dst
)。 - 主机:
host
(主机),net
(网络),port
(端口)。 - 值: 地址、端口号等。
- 逻辑运算:
and
(与,&&
),or
(或,||
),not
(非,!
)。
常用捕获过滤器示例
-
过滤主机
host 192.168.1.1
- 捕获所有与 192.168.1.1 通信的流量(进出)。src host 192.168.1.1
- 只捕获来源是 192.168.1.1 的流量。dst host 192.168.1.1
- 只捕获目的是 192.168.1.1 的流量。
-
过滤端口
port 80
- 捕获所有 HTTP 流量(源或目的端口是 80)。tcp port 443
- 捕获所有 HTTPS 流量。src port 53
- 捕获来源端口为 53(通常是 DNS 查询响应)的流量。udp portrange 1000-2000
- 捕获 UDP 端口范围在 1000 到 2000 之间的流量。
-
过滤网络
net 192.168.0.0/24
- 捕获所有与 192.168.0.x 网段通信的流量。src net 10.0.0.0/8
- 捕获来源网络为 10.0.0.0/8 的流量。
-
协议过滤
arp
- 只捕获 ARP 数据包。icmp
- 只捕获 ICMP (Ping) 数据包。not broadcast and not multicast
- 忽略广播和多播流量,只捕获单播流量。
-
复杂组合
src host 192.168.1.100 and (tcp port 80 or tcp port 443)
- 捕获来自 192.168.1.100 的 HTTP 或 HTTPS 流量。host www.google.com and not port 80
- 捕获与 www.google.com 通信的非 80 端口流量(可用于分析其使用的其他 API)。
第二部分:显示过滤器
显示过滤器在数据包被抓取之后进行过滤,它不会影响捕获的原始数据,只是改变视图的显示。其语法更强大、更直观。
基本语法结构: 协议.字段 运算符 值
- 协议/字段: 如
ip.src
,tcp.port
,http.request.uri
。 - 比较运算符:
==
(等于),!=
(不等于)>
(大于),<
(小于),>=
(大于等于),<=
(小于等于)
- 逻辑运算符:
and
(与),or
(或),not
(非),xor
(异或)
- 其他运算符:
contains
- 包含某个字符串,如http.host contains "google"
。matches
- 使用正则表达式匹配,如http.request.uri matches "\.(php|asp)$"
。in
- 判断字段是否在某个集合中。
常用显示过滤器分类汇总
1. IP 过滤
ip.addr == 192.168.1.1
- 显示所有与 192.168.1.1 相关的 IP 包。ip.src == 192.168.1.1
- 显示源 IP 是 192.168.1.1 的包。ip.dst == 192.168.1.1
- 显示目的 IP 是 192.168.1.1 的包。ip.src == 10.0.0.1 and ip.dst == 192.168.1.100
- 显示从 10.0.0.1 到 192.168.1.100 的流量。ip.addr == 192.168.0.0/16
- 显示与 192.168.x.x 网段相关的所有流量。
2. 端口与 TCP/UDP 过滤
tcp.port == 80
- 显示 TCP 源或目的端口为 80 的包。udp.port == 53
- 显示 DNS 流量。tcp.dstport == 3389
- 显示目的端口为 3389 (RDP) 的流量。tcp.flags.syn == 1 and tcp.flags.ack == 0
- 显示 TCP SYN 包(三次握手第一步)。tcp.analysis.retransmission
- 显示所有重传的 TCP 包,对分析网络性能问题极其有用。tcp.window_size < 1000
- 显示 TCP 窗口大小小于 1000 的包,可能指示接收端拥塞。
3. 协议过滤
http
- 显示所有 HTTP 协议包。dns
- 显示所有 DNS 协议包。icmp
或icmp.type == 8
- 显示所有 ICMP 包或特定类型(如 8 为 Echo Request)。arp
- 显示 ARP 协议包。ssl
或tls
- 显示 SSL/TLS 握手和应用数据。
4. 应用层协议过滤 (HTTP, DNS等)
- HTTP:
http.request.method == "GET"
- 显示所有 HTTP GET 请求。http.request.method == "POST"
- 显示所有 HTTP POST 请求。http.response.code == 404
- 显示所有 404 响应的包。http.host contains "baidu.com"
- 显示 Host 头中包含 “baidu.com” 的 HTTP 请求。http.request.uri == "/images/logo.png"
- 显示请求特定 URI 的 HTTP 包。
- DNS:
dns.qry.name == "www.example.com"
- 显示对特定域名的 DNS 查询。dns.flags.response == 1
- 显示所有 DNS 响应包。dns.resp.type == 5
- 显示 DNS CNAME 记录响应。
5. 复合条件与高级技巧
(http or ssl) and ip.src == 192.168.1.100
- 显示来自 192.168.1.100 的 HTTP 或 SSL 流量。not arp and not icmp
- 不显示 ARP 和 ICMP 包,净化视图。tcp.stream eq 10
- 显示整个 TCP 流(会话),编号为 10。这是分析完整会话的利器!frame.time_relative >= 60.0
- 显示从捕获开始 60 秒之后的数据包。data.data
- 显示包含应用层数据的包(常用于非标准协议分析)。
第三部分:实用场景与技巧
-
排查网页访问慢:
- 先过滤
http and ip.addr == 目标网站IP
,查看 HTTP 请求响应时间。 - 再过滤
tcp.analysis
,查看是否有retransmission
(重传)、duplicate ack
(重复确认)等,判断是否是网络问题。
- 先过滤
-
抓取登录密码(安全测试):
- 使用显示过滤器
http.request.method == "POST"
,在包详情中展开HTML Form URL Encoded
即可看到提交的用户名和密码。
- 使用显示过滤器
-
分析特定连接问题:
- 右键有问题的包 ->
Follow
->TCP Stream
,Wireshark 会自动生成tcp.stream eq X
过滤器,让你专注于这个会话。
- 右键有问题的包 ->
-
保存过滤器:
- 在过滤器输入框输入常用的过滤器后,点击最右边的书签图标,可以将其保存为“过滤器按钮”,方便一键点击。
-
自动补全:
- 在输入显示过滤器时,Wireshark 会提供自动补全提示,这是学习和验证语法的好方法。
总结
特性 | 捕获过滤器 | 显示过滤器 |
---|---|---|
作用阶段 | 数据包进入前 | 数据包捕获后 |
语法 | BPF 语法 | Wireshark 专属语法 |
效率 | 高,不消耗磁盘和内存存储无用包 | 低,所有数据都已捕获,只是隐藏 |
灵活性 | 低,条件判断相对简单 | 极高,可对任何协议字段进行复杂判断 |
用途 | 在繁忙链路上抓取特定流量,避免资源耗尽 | 对已捕获的数据包进行深入、灵活的分析 |
最佳实践: 在不确定目标时,可以先使用一个宽泛的捕获过滤器(如 not arp
)或直接全部捕获,然后利用强大的显示过滤器进行精细化分析。
掌握 Wireshark 过滤器是成为网络分析专家的必经之路。在实践中多尝试、多组合,将这些命令融会贯通,从而让 Wireshark 真正成为您手中的“网络显微镜”。