在Scapy中读取pcap文件的一部分

问题描述 投票:-1回答:1

我一直试图找到一种使用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终端中拆分数据包,但是由于这也将被其他人使用,因此我希望脚本能够完成所有工作。我认为有一个更简单的解决方案,我一直找不到。预先感谢。

python scapy pcap
1个回答
0
投票

您可能无需阅读即可打开所有文件,然后遍历数据包。有点像

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()
© www.soinside.com 2019 - 2024. All rights reserved.