如何在 wireshark 捕获中以编程方式设置标签 frame.ref_time

how to programmatically set label frame.ref_time in wireshark capture

我有数百个捕获文件,需要汇总对服务器向大量客户端发出的特定请求的响应。我正在使用脚本来处理使用 tshark 的捕获文件。

我想以编程方式为匹配特定显示过滤器的数据包设置 frame.ref_time,然后使用 frame.time_relative < x seconds 重新扫描以适合我的目的(我已经使用 tcp.stream 作为过滤器但需要进一步限制)。

tshark 和 editcap 似乎都没有这样做,但我不确定。难道这个能力不限于gui?

如何从脚本中以编程方式设置 frame.ref_time? 设置好label后,有没有比较直接的方法清除所有label,还是优雅一点,逆向操作?

据我所知,您只能使用 GUI 设置 frame.ref_time;但是,此限制对您来说不一定是个问题。一旦你应用了一个过滤器,当这些数据包被写入一个新文件 并通过管道传输到另一个 tshark 实例时,所有帧都将成为与第一个匹配过滤器的数据包相关的帧;因此,您应该能够使用 tshark 的两个实例来实现您所需要的,第一个实例用于隔离感兴趣的流,第二个实例用于隔离符合时间相关标准的那些帧。

例如,假设您对与 TCP 流 0 关联的数据包感兴趣,但只对那些在开始后 0.1 秒内收到的属于该流一部分的数据包感兴趣的流。在这种情况下,您可以使用如下命令:

tshark -r capturefile.pcap -Y "tcp stream eq 0" -w - | tshark -r - -Y "frame.time_relative < 0.1"

有关 tshark 选项的详细信息,请参阅 tshark man page