使用 Scapy 模块从 pcap 文件中获取特定包 (python)

Getting a particular package from the pcap file using the Scapy module (python)

有没有办法使用 Scapy 从 pcap 文件加载特定的包?

我知道我可以使用'嗅探'功能和计数属性加载特定数量的包,例如。 G。'

sniff(offline='file.pcap', prn=action, count=31)

但是,我需要在不加载之前的数据包的情况下获取第 30 个数据包。 也就是说,我对这样的例子并不满意:

packages = (pkt for pkt in sniff (offline=path, prn=action, count=31) 
print(packages[30])

尝试加载包的百万分之一的时间太长。

每个数据包 header 说明它有多长。一旦解析器读取了 header,它就可以计算下一个的位置。据我所知,您无法打开 pcap 文件并 立即 定位数据包 30;您需要解析前 29 个的 header。

但是您也不必将所有数据包都保存在内存中,只要您在接收时处理它们即可。

i = 0
for pkt in sniff(offline=path, prn=action):
    if i == 30:
        print pkt
        break