问题描述
我在多个地方进行了搜索,但找不到这个问题的简单答案- 我有一个.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)