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

7

有没有一种智能且快速的方法从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])

但是在我的机器上解析一个大小为70MB的PCAP文件并提取370个唯一条目大约需要两分钟时间...


你所说的IP packages是指IP数据包吗? - RyPeck
@RyPeck 是的,我在问题中已经更正了。 - reox
难道您的意思不是指夫妻(源地址,目标地址)吗?因为这正是您正在做的事情。或许您是指IP地址? - Pierre
1个回答

9

我认为实现您想要的(根据您提供的代码,我认为您想要的是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.payload_guess = []

然后运行之前的命令。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接