我一直试图找到一种使用scapy读取pcap文件的一部分的方法。
Ex:我有一个1000行的pcap文件。
问题:是否可以十次阅读,即顺序阅读一百行?
方案是:
我正在读取多个pcap文件并比较它们之间的数据包。为了比较数据包,我使用索引并将特定的数据包称为pkt = packets_from_pcap_file_7[idx]
。要使用索引,我需要使用rdpcap(FILENAME.pcap)
读取pcap文件。但是,此函数将读取整个pcap文件并导致MemoryError。
由于我想比较来自不同文件的特定数据包,因此我发现很难使用RawPcapReader(FILENAME.pcap)
在这里我可以遍历一个特定的数据包,如下所示:
packets = RawPcapReader(FILENAME.pcap)
for pkt in packets:
pkt.doThings
我将发布一个非常慢的解决方案,以解决我们必须为每个数据包遍历整个pcap文件并迭代至指定索引的问题:
def get_packet(idx):
packets = RawPcapReader("FILENAME.pcap")
counter = 0
for pkt in packets:
if counter == idx:
return pkt
counter += 1
我可以在linux终端中拆分数据包,但是由于这也将被其他人使用,因此我希望脚本能够完成所有工作。我认为有一个更简单的解决方案,我一直找不到。预先感谢。
您可能无需阅读即可打开所有文件,然后遍历数据包。有点像
files = ["a.pcap", "b.pcap", ......]
fds = [RawPcapReader(x) for x in files]
while True:
try:
# get the next packets of all files
pkts = [next(x) for x in fds]
# do something with them
except EOFError:
# file has ended
break
for f in fds:
f.close()