如何使用 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)
我在几个地方搜索过,但没有找到这个问题的简单答案 - 我有一个使用 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)