在网络运维、故障排查或协议分析场景中,Wireshark 是当之无愧的 “瑞士军刀”。但面对动辄上万条的数据包,若不会用过滤器筛选,就像在稻草堆里找针——效率极低。Wireshark 的过滤器分为捕获过滤器(抓包时筛选,减少冗余数据)和显示过滤器(抓包后筛选,精准定位目标),两者语法不同,却都是提升分析效率的核心。下面整理的 50 个技巧,覆盖基础到进阶场景,每一个都经过实战验证,帮你高效完成网络协议分析。
一、先搞懂基础:捕获 vs 显示过滤器的核心差异
在学习具体技巧前,必须分清这两类过滤器,否则极易用错语法导致筛选失效:
- 捕获过滤器:作用于 “抓包阶段”,只捕获符合条件的数据包,减少硬盘存储压力(语法基于 BPF,即 Berkeley Packet Filter)。
- 显示过滤器:作用于 “分析阶段”,从已捕获的数据包中筛选显示(语法是 Wireshark 自定义,功能更精细)。
举个简单例子:抓 “192.168.1.100” 的流量,捕获过滤器用 host 192.168.1.100,显示过滤器用 ip.addr == 192.168.1.100——这是最基础也最容易混淆的点,务必记牢。
二、捕获过滤器技巧(20个):抓包阶段就筛掉无用数据
捕获过滤器的核心是 “提前过滤”,避免抓包文件过大。以下技巧按 “主机 / 端口 / 协议 / 网段” 分类,覆盖常见场景:
1. 捕获单个主机的所有流量
语法:host [IP地址]
示例:host 192.168.1.100
说明:捕获目标 IP 的 “接收 + 发送” 所有数据包,适合排查单台设备的网络问题(如某台电脑无法上网)。
2. 捕获 “源主机” 发送的流量
语法:src host [IP地址]
示例:src host 192.168.1.100
说明:只抓从目标 IP 发出去的包,比如看某台设备是否有异常向外发包(如疑似挖矿程序)。
3. 捕获 “目的主机” 接收的流量
语法:dst host [IP地址]
示例:dst host 192.168.1.1(网关 IP)
说明:只抓发给目标 IP 的包,适合排查 “设备是否能正常向网关发请求”。
4. 捕获两个主机之间的流量
语法:host [IP1] and host [IP2]
示例:host 192.168.1.100 and host 10.0.0.5
说明:只保留两台设备之间的通信包,排除其他无关流量(如排查两台服务器的连接问题)。
5. 捕获 “非某主机” 的流量
语法:not host [IP地址]
示例:not host 192.168.1.200
说明:抓除目标 IP 外的所有流量,适合排除某台已知正常的设备,聚焦其他可疑设备。
6. 捕获单个端口的流量
语法:port [端口号]
示例:port 80
说明:捕获所有 “使用 80 端口” 的 TCP/UDP 流量(80 是 HTTP 默认端口),适合排查 Web 服务问题。
7. 捕获 “源端口” 的流量
语法:src port [端口号]
示例:src port 5432(PostgreSQL 默认端口)
说明:只抓从指定端口发出去的包,比如看数据库服务器是否正常对外提供服务。
8. 捕获 “目的端口” 的流量
语法:dst port [端口号]
示例:dst port 22(SSH 默认端口)
说明:只抓发给指定端口的包,适合排查 “远程登录某服务器是否成功”。
9. 捕获端口范围的流量
语法:portrange [起始端口]-[结束端口]
示例:portrange 8000-8080
说明:捕获指定端口段的流量,适合排查某应用使用端口段(如微服务或特定应用)的通信情况。
10. 排除某个端口的流量
语法:not port [端口号]
示例:not port 443(HTTPS 默认端口)
说明:抓除指定端口外的所有流量,适合排除加密流量,聚焦明文协议分析(如 HTTP、Telnet)。
11. 捕获指定协议的流量(TCP/UDP)
语法:tcp 或 udp
示例:tcp
说明:只抓 TCP 协议的包,适合分析三次握手、四次挥手或 TCP/IP 丢包问题;udp 同理,用于 DNS、DHCP 等 UDP 协议分析。
12. 捕获 “TCP + 指定端口” 的流量
语法:tcp and port [端口号]
示例:tcp and port 443
说明:精准捕获 TCP 协议下 443 端口的流量(即 HTTPS 的 TCP 通信),避免 UDP 协议的 443 端口干扰。
13. 捕获 “UDP + 指定端口” 的流量
语法:udp and port [端口号]
示例:udp and port 53(DNS 默认端口)
说明:只抓 DNS 的 UDP 流量,排除 TCP 协议的 DNS 请求(大域名解析可能用 TCP),聚焦常规 DNS 问题。
14. 捕获单个网段的流量
语法:net [网段/子网掩码]
示例:net 192.168.1.0/24
说明:捕获指定网段的所有流量,适合排查某一网段的网络拥堵或故障。
15. 捕获 “源网段” 的流量
语法:src net [网段/子网掩码]
示例:src net 10.0.0.0/8
说明:只抓从指定网段发出去的包,比如看内网是否有设备向外网发送异常流量。
16. 捕获 “目的网段” 的流量
语法:dst net [网段/子网掩码]
示例:dst net 172.16.0.0/12
说明:只抓发给指定网段的包,适合排查 “内网设备是否能正常访问另一内网网段”。
17. 捕获 “大于指定大小” 的数据包
语法:greater [字节数]
示例:greater 1500
说明:只抓长度超过指定字节数的包(通常是 MTU 相关的大包),适合排查 “大包分片失败” 导致的网络问题。
18. 捕获 “小于指定大小” 的数据包
语法:less [字节数]
示例:less 64
说明:只抓长度小于指定字节数的包(通常是 ARP、ICMP 请求等小包),适合排查 “频繁小包导致的网络广播风暴”。
19. 组合过滤:“协议 + 主机 + 端口”
语法:[协议] and host [IP] and port [端口]
示例:tcp and host 192.168.1.100 and port 8080
说明:精准捕获单设备、单协议、单端口的通信,适合定位复杂环境下的具体问题。
20. 排除多个条件:“not (条件1 or 条件2)”
语法:not (host [IP1] or port [端口1])
示例:not (host 192.168.1.200 or port 443)
说明:同时排除指定IP和端口的流量,适合聚焦其他关键流量。
三、显示过滤器技巧(25个):抓包后精准定位目标
显示过滤器功能更精细,支持按 “IP 属性、TCP 标志位、协议字段” 等筛选,是故障排查的核心工具。
21. 显示单个主机的所有流量
语法:ip.addr == [IP地址]
示例:ip.addr == 192.168.1.100
说明:等同于捕获过滤器的 host,但作用于已捕获的数据包,可随时开关筛选,更为灵活。
22. 显示 “源 IP” 的流量
语法:ip.src == [IP地址]
示例:ip.src == 192.168.1.100
说明:只显示从目标 IP 发出去的包,可结合 “时间列” 分析设备的发包时序。
23. 显示 “目的 IP” 的流量
语法:ip.dst == [IP地址]
示例:ip.dst == 202.97.96.68(某 DNS 服务器 IP)
说明:只显示发给目标 IP 的包,适合排查 “设备是否能正常向目标 IP 发送请求”。
24. 显示 “IP 在某网段” 的流量
语法:ip.addr in [网段]
示例:ip.addr in 192.168.1.0/24
说明:显示所有涉及指定网段的数据包,比 ip.src + ip.dst 的组合更简洁。
25. 显示 “TTL 异常” 的流量
语法:ip.ttl < [数值] 或 ip.ttl > [数值]
示例:ip.ttl < 10
说明:TTL 值过小可能意味着数据包经过过多路由节点,适合排查跨网段通信延迟问题。
26. 显示 TCP 协议的 SYN 包(三次握手第一步)
语法:tcp.flags.syn == 1
示例:tcp.flags.syn == 1 and not tcp.flags.ack == 1
说明:只显示 “纯 SYN 包”,适合排查是否有设备尝试建立 TCP 连接但无响应。
27. 显示 TCP 协议的 FIN 包(四次挥手第一步)
语法:tcp.flags.fin == 1
示例:tcp.flags.fin == 1
说明:显示 TCP 连接关闭的初始包,结合 “时间列” 可分析连接关闭是否正常。
28. 显示 TCP 协议的 RST 包(强制断开连接)
语法:tcp.flags.reset == 1
示例:tcp.flags.reset == 1
说明:RST 包表示强制断开连接,若频繁出现,需重点排查端口未开放、服务崩溃或网络拥堵。
29. 显示 “TCP 端口异常” 的流量
语法:tcp.port == [端口号] 或 tcp.port != [端口号]
示例:tcp.port == 8080
说明:显示所有使用指定端口的 TCP 流量。可用 tcp.srcport 或 tcp.dstport 进行更精准的区分。
30. 显示 “TCP 重传” 的数据包
语法:tcp.analysis.retransmission
示例:tcp.analysis.retransmission
说明:Wireshark 会自动标记重传包。频繁重传通常表明网络存在丢包,需要进一步排查链路稳定性。
31. 显示 “TCP 窗口满” 的数据包
语法:tcp.window_size == 0
示例:tcp.window_size == 0
说明:TCP 窗口为 0 表示接收方缓冲区已满,可能是接收方性能不足导致的,需检查接收端设备状态。
32. 显示 UDP 协议的指定端口流量
语法:udp.port == [端口号]
示例:udp.port == 67(DHCP 服务器端口)
说明:显示指定端口的 UDP 流量,可结合具体协议过滤器(如 dhcp)进行更精准的分析。
33. 显示 HTTP 协议的所有请求
语法:http
示例:http
说明:显示所有 HTTP 协议的数据包,适合排查 Web 应用问题。注意:HTTPS 流量需解密后才能用此过滤器。
34. 显示 HTTP 的 GET 请求
语法:http.request.method == “GET”
示例:http.request.method == “GET”
说明:只显示 HTTP 的 GET 请求,可结合 http.request.uri 查看具体请求的 URL。
35. 显示 HTTP 的 POST 请求
语法:http.request.method == “POST”
示例:http.request.method == “POST”
说明:只显示 HTTP 的 POST 请求,适合排查表单提交、API 接口调用等异常。
36. 显示 HTTP 的 “4xx/5xx 错误” 响应
语法:http.response.code >= 400
示例:http.response.code == 404 或 http.response.code == 500
说明:快速定位 HTTP 错误响应。4xx 通常表示客户端问题,5xx 通常表示服务器端问题。
37. 显示 DHCP 协议的流量
语法:dhcp
示例:dhcp
说明:显示 DHCP 协议的 “请求” 和 “响应” 包,适合排查设备无法自动获取 IP 地址等问题。
38. 显示 DNS 协议的流量
语法:dns
示例:dns
说明:显示 DNS 协议的 “查询” 和 “响应” 包,可结合 dns.qry.name 查看具体查询的域名。
39. 显示 DNS 解析失败的流量
语法:dns.resp.code != 0
示例:dns.resp.code != 0
说明:DNS 响应码非 0 表示解析失败,适合排查网站无法访问是否源于 DNS 问题。
40. 显示 ICMP 协议的流量(ping 包)
语法:icmp
示例:icmp
说明:显示 ICMP 的请求和响应包,是检查网络连通性的基础工具。
41. 显示 ICMP 错误包(如目标不可达)
语法:icmp.type != 8 and icmp.type != 0
示例:icmp.type != 8 and icmp.type != 0
说明:筛选出非 Echo 请求/响应的 ICMP 包,用于排查网络不可达、超时等具体原因。
42. 显示 “指定时间范围” 的数据包
语法:frame.time >= “YYYY-MM-DD HH:MM:SS” and frame.time <= “YYYY-MM-DD HH:MM:SS”
示例:frame.time >= “2025-12-01 10:00:00” and frame.time <= “2025-12-01 10:05:00”
说明:只显示某一时间窗口的数据包,适合回溯分析特定时间点发生的网络故障。
43. 显示 “数据包长度异常” 的流量
语法:frame.len > [字节数] 或 frame.len < [字节数]
示例:frame.len > 2000
说明:frame.len 是数据包的总长度,可用于发现异常大小的数据包,辅助排查 MTU 相关问题。
44. 显示 “包含指定字符串” 的数据包
语法:frame contains “ [字符串] “
示例:frame contains “login”
说明:在全数据包中搜索明文字符串,适合分析 HTTP、Telnet 等未加密协议中的特定请求。
45. 显示 “ARP 协议” 的流量
语法:arp
示例:arp
说明:显示 ARP 请求与响应包,是排查局域网内 IP 地址冲突或 ARP 欺骗等问题的重要手段。
四、高级过滤器技巧(5个):突破基础,解决复杂问题
掌握以下技巧,能应对更复杂的分析场景,体现深度运维能力。
46. 组合多个显示条件(逻辑与/或/非)
语法:(条件1) and (条件2) or (条件3)
示例:(ip.addr == 192.168.1.100) and (tcp.port == 8080) or (http.response.code == 500)
说明:通过括号控制逻辑优先级,实现多场景并行排查。
47. 显示 “TCP 流异常” 的流量
语法:tcp.analysis.out_of_order(乱序)或 tcp.analysis.delay > [毫秒](延迟)
示例:tcp.analysis.out_of_order
说明:乱序包和异常延迟通常是网络链路不稳定的直接表现。
48. 显示 “自定义协议” 的流量
语法:tcp.port == [自定义端口] and tcp.payload[0:2] == 0x1234
示例:tcp.port == 9000 and tcp.payload[0:2] == 0xAB12
说明:通过端口和负载字节的组合,可以精准筛选基于 TCP 的自定义应用层协议流量。
49. 显示 “排除特定 MAC 地址” 的流量
语法:eth.addr != [MAC地址]
示例:eth.addr != 00:11:22:33:44:55
说明:在数据链路层进行过滤,适合排除已知正常或干扰设备的流量。
50. 保存常用过滤器
操作:在显示过滤器输入框右侧,点击 “保存” 图标并命名。
说明:将复杂的组合过滤器保存为模板,可极大提升重复性排查工作的效率。
五、注意事项:避免踩坑,提升准确性
- 语法别混淆:捕获过滤器用
host/src/dst,显示过滤器用 ip.addr ==/ip.src ==,两者不可混用。
- 大小写敏感性:显示过滤器不区分大小写,但捕获过滤器的协议名需小写(如
tcp 不能写成 TCP)。
- 别过度过滤:在捕获阶段使用过于严格的条件可能导致遗漏关键故障数据包。
- HTTPS 需解密:分析 HTTPS 流量前,需在 Wireshark 的 SSL/TLS 设置中导入服务器私钥或会话密钥进行解密。
总结:技巧要落地,实践出真知
Wireshark 过滤器的核心价值在于 “按需筛选”。例如,排查“网站无法访问”,可遵循以下思路:先检查 DNS 解析(dns + dns.qry.name),再验证 TCP 连接是否建立(tcp.flags.syn),最后查看 HTTP 交互(http.response.code)。熟练掌握并组合运用上述技巧,将能系统性地应对绝大多数网络协议分析与故障排查场景。