如何使用python获取TCP时间戳TSval

问题描述

我在多个地方进行了搜索,但找不到这个问题的简单答案- 我有一个.pcap文件,该文件使用Wireshark生成,其中包含多个数据包,我希望从每个数据包中提取它的TCP时间戳(TSval)。 我已经设法使用Scapy打开每个数据包

packets = rdpcap('pcap_file.pcap')
for packet in packets:
    print(packet.payload.id)

但是我找不到数据包的TSval(即使当我用Wireshark打开数据包时可以看到数据包中的TSval字段,如下图所示)。

https://gstreamer.freedesktop.org

解决方法

可以像字典一样访问数据包,其字典的键是协议,值是有效载荷。例如,您可以将TCP有效负载打印在这样的数据包中:

if TCP in packet:
   packet[TCP].show()

现在要获取有效负载的TSval,必须在TCP选项中查看。 scapy将每个TCP选项编码为一对(option name,option value)。对于时间戳选项,选项值本身是一对(TSval,TSecr)。因此,您基本上可以执行以下操作:

from scapy.all import TCP,rdpcap

packets = rdpcap('packets.pcapng')
for packet in packets:
    if TCP in packet:  #  ignore packets without TCP payload
        for opt,val in packet[TCP].options:  #  consider all TCP options
            if opt == 'Timestamp':
                TSval,TSecr = val  #  decode the value of the option
                print('TSval =',TSval)