Чтение части файла pcap в Scapy - PullRequest
0 голосов
/ 28 февраля 2020

Я пытался найти способ прочитать часть pcap-файла, используя scapy.

Пример: У меня есть pcap-файл с 1000 строками.

Вопрос: Можно ли прочитать это по 10 штук, то есть последовательно прочитать 100 строк?

Сценарий:

Я читаю несколько файлы pcap и сравнение пакетов между ними. Для сравнения пакетов я использую index и вызываю указанный c пакет как pkt = packets_from_pcap_file_7[idx]. Для использования индекса мне нужно прочитать pcap-файлы с rdpcap(FILENAME.pcap). Однако эта функция прочитает весь pcap-файл и вызовет MemoryError.

Поскольку я хочу сравнивать указанные c пакеты из разных файлов, мне трудно использовать RawPcapReader(FILENAME.pcap), где я могу просто выполнить итерацию через один указанный c пакет в то время как:

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, но, поскольку это будет использоваться и для других, я бы хотел, чтобы скрипты выполняли всю работу. Я думаю, что есть гораздо более простое решение, которое я не смог найти. Заранее спасибо.

1 Ответ

0 голосов
/ 28 февраля 2020

Вероятно, вы можете открыть все файлы, не читая их, а затем перебрать пакеты. Что-то вроде

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()
...