找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

262

积分

0

好友

32

主题
发表于 昨天 02:22 | 查看: 8| 回复: 0

在网络运维、故障排查或协议分析场景中,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)

语法:tcpudp 示例: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.srcporttcp.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 == 404http.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. 保存常用过滤器

操作:在显示过滤器输入框右侧,点击 “保存” 图标并命名。 说明:将复杂的组合过滤器保存为模板,可极大提升重复性排查工作的效率。

五、注意事项:避免踩坑,提升准确性

  1. 语法别混淆:捕获过滤器用 host/src/dst,显示过滤器用 ip.addr ==/ip.src ==,两者不可混用。
  2. 大小写敏感性:显示过滤器不区分大小写,但捕获过滤器的协议名需小写(如 tcp 不能写成 TCP)。
  3. 别过度过滤:在捕获阶段使用过于严格的条件可能导致遗漏关键故障数据包。
  4. HTTPS 需解密:分析 HTTPS 流量前,需在 Wireshark 的 SSL/TLS 设置中导入服务器私钥或会话密钥进行解密。

总结:技巧要落地,实践出真知

Wireshark 过滤器的核心价值在于 “按需筛选”。例如,排查“网站无法访问”,可遵循以下思路:先检查 DNS 解析(dns + dns.qry.name),再验证 TCP 连接是否建立(tcp.flags.syn),最后查看 HTTP 交互(http.response.code)。熟练掌握并组合运用上述技巧,将能系统性地应对绝大多数网络协议分析与故障排查场景。

您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区(YunPan.Plus) ( 苏ICP备2022046150号-2 )

GMT+8, 2025-12-3 13:46 , Processed in 0.062803 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 CloudStack.

快速回复 返回顶部 返回列表