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

How to get TCP-Timestamp (TSval) using python

我在几个地方搜索过,但没有找到这个问题的简单答案 - 我有一个使用 Wireshark 生成的 .pcap 文件,其中包含多个数据包,我希望从每个数据包中提取它的 TCP 时间戳 (TSval)。 我设法使用 scapy

打开了每个数据包
packets = rdpcap('pcap_file.pcap')
for packet in packets:
    print(packet.payload.id)

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

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

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

现在要获取负载的 TSval,您必须查看 TCP 选项。每个 TCP 选项都由 scapy 编码为一对 (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)