我整天都在等待循环退出而没有希望!!我知道python在性能方面效率不高,因此我非常感谢提速解决问题的建议。
我已经使用wireshark捕获了大量数据包(大约500,000个),并将其保存到.pcap文件中。之后,我使用Scapy rdpcap()函数从保存的文件中读取数据包,然后循环访问每个数据包以提取源IP地址。我的代码如下:
from scaly.all import *
srcList =[]
Packets = rdpcap("pcapfile")
for pkt in Packets:
src = Packets[Packets.index(pkt)][1].src
srcList.append(src)
注意:我进行了一些挖掘,发现Cython用于加快嵌套循环的速度,但是老实说,我不知道如何在我的情况下使用它。任何见解都会很棒
如果我不误解您的意图,则可以简化代码,这也应该加快速度:
我怀疑问题出在src = Packets[Packets.index(pkt)][1].src
行上,因为循环是O(n)
,列表搜索是O(n)
,因此使其成为O(n**2)
。
如果您只需要IP源,请告诉scapy忽略在IP层之后执行以下操作的任何解析: