2013-11-20 3 views
4

Есть ли умный и быстрый способ получить все IP-адреса из файла PCAP? Мне нужен только (адрес назначения, адрес источника) кортежи.Получите IP-адреса из файла PCAP в scapy

В настоящее время я использую rdpcap функцию Scapy как это:

from scapy.all import * 
pcap = rdpcap('file.pcap') 

ips = set([(p[IP].fields['src'], p[IP].fields['dst']) for p in pcap if p.haslayer(IP) == 1]) 

Но это занимает около двух минут на моей машине, чтобы разобрать 70MB PCAP файл с 370 уникальных извлекаемых записей ...

+0

По IP-пакетам вы имеете в виду IP-пакеты? – RyPeck

+0

@RyPeck да, исправлено, что в вопросе – reox

+0

Разве вы не имеете в виду пары (адрес источника, адрес назначения)? Потому что это то, что ты делаешь. Или могут быть IP-адреса *? – Pierre

ответ

3

«Лучший» способ сделать то, что я думаю (на основе кода, который вы предоставили, я полагаю, вы хотите, чтобы пары (IP-адрес источника, адрес IP-адреса), а не IP-пакеты), вы хотите:

>>> set((p[IP].src, p[IP].dst) for p in PcapReader('file.pcap') if IP in p) 

Вы не тратите память на весь файл PCAP, объект set создается пакетом по пакету.

Если это не достаточно быстро, вы можете поручить Scapy не рассекать пакеты после IP слоя, так как вы не используете IP полезную нагрузку:

>>> IP.payload_guess = [] 

А затем запустить предыдущую команду.

Смежные вопросы