Wireshark 可以通过显示过滤器筛选出两条报文间时间差为 2 秒的数据包,核心是用 frame.time_delta 或 tcp.time_delta 字段设定阈值,同时可结合协议/会话条件缩小范围。以下是具体实现方法、字段差异及实战示例:
一、核心时间差字段
| 字段 | 含义 | 适用场景 | 示例 |
|---|---|---|---|
| frame.time_delta | 当前包与前一个包的捕获时间差(秒) | 全流量时间间隔检测 | frame.time_delta == 2.0 |
| frame.time_delta_displayed | 当前显示列表中与前一包的时间差 | 已过滤结果内的间隔检测 | frame.time_delta_displayed > 2.0 |
| tcp.time_delta | 同 TCP 流内当前包与前一包的时间差 | 单 TCP 会话内间隔检测 | tcp.time_delta >= 2.0 |
| tcp.analysis.ack_rtt | TCP 数据包到对应 ACK 的往返时间 | 检测 TCP 确认延迟 | tcp.analysis.ack_rtt > 2.0 |
二、基础过滤方法(全局/会话)
-
全局时间差过滤 :筛选所有包中与前一包时间差等于 2 秒的包(允许微小误差)
frame.time_delta >= 1.999 && frame.time_delta <= 2.001 -
TCP 会话内过滤 :仅针对某 TCP 流(如端口 8080)检测 2 秒间隔
tcp.port == 8080 && tcp.time_delta >= 2.0 -
TCP 确认延迟过滤 :筛选 TCP 数据包与其 ACK 之间往返时间超 2 秒的包
tcp.analysis.ack_rtt > 2.0
三、精确场景配置(步骤)
- 显示时间差列 (可选):
- 右键 Packet List 列标题 → 勾选 Delta Time (显示
frame.time_delta) - 或勾选 TCP Delta Time (显示
tcp.time_delta),直观查看间隔值。
- 右键 Packet List 列标题 → 勾选 Delta Time (显示
- 输入过滤表达式 :
- 在过滤器栏输入上述表达式,按回车应用;
- 如需仅显示异常包,可搭配协议条件(如
tcp && frame.time_delta > 2.0)。
- 调整时间显示格式 (可选):
- 点击 View → Time Display Format ,选择 Seconds Since Previous Captured Packet,便于观察时间差。
四、常见问题与注意事项
- 时间差不精确:网络延迟或系统时间戳精度问题可能导致严格等于 2 秒的情况极少,建议用区间(如 1.999--2.001)匹配。
- 仅显示部分包 :
frame.time_delta_displayed基于当前显示列表计算,若已应用其他过滤,可能与实际捕获时间差不符。 - TCP 流内间隔 :
tcp.time_delta仅在同一会话内计算,适合分析单连接的传输间隙。
五、实战示例(工业场景)
假设排查 PLC 与上位机(IP 192.168.1.100,端口 502)的 Modbus/TCP 通信延迟,筛选间隔超 2 秒的包:
ip.addr == 192.168.1.100 && tcp.port == 502 && frame.time_delta > 2.0
需要我根据你的抓包场景(如 特定 IP/端口 或 协议 )生成可直接复制的 2 秒时间差过滤表达式吗?