从scapy中获取PCAP文件中的IP地址

reo*_*eox 5 optimization scapy pcap

是否有一种智能,快速的方法从PCAP文件中获取所有IP地址?我只需要(目标地址,源地址)元组.

目前我正在使用Scapy的rdpcap功能:

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])
Run Code Online (Sandbox Code Playgroud)

但是我的机器需要大约两分钟来解析一个70MB的PCAP文件,其中包含370个独特的提取条目......

Pie*_*rre 5

做我想的"最佳"方式(基于你提供的代码,我想你想要的是你想要的夫妻(IP源地址,IP目的地地址)而不是IP包):

>>> set((p[IP].src, p[IP].dst) for p in PcapReader('file.pcap') if IP in p)
Run Code Online (Sandbox Code Playgroud)

您不会浪费内存与整个PCAP文件,该set对象是逐包构建的.

如果它不够快,您可以指示Scapy不要在该IP层之后解析数据包,因为您不使用IP有效负载:

>>> IP.payload_guess = []
Run Code Online (Sandbox Code Playgroud)

然后运行上一个命令.