为了账号安全,请及时绑定邮箱和手机立即绑定

Scapy stop_filter 导致巨大的内存泄漏

Scapy stop_filter 导致巨大的内存泄漏

胡子哥哥 2021-12-09 14:34:12
我有一个启动虚拟主机的应用程序。我注意到随着时间的推移,内存正在迅速增加。经过多次尝试寻找原因后,结果证明原因是使用stop_filterin scapy。以下简化代码是可运行的,您只需复制/粘贴即可:from scapy.all import *import threadingfrom time import sleepdef stopFilter(packet):    if ICMP in packet:        if packet[1].dst == '192.168.0.70':            print('packet found')            return Truedef host():    while True:        sniff(iface="Intel(R) PRO/1000 PT Dual Port Server Adapter #2", timeout=2, stop_filter=stopFilter, store=0)        sleep(2)for i in range(200):    print(i)    t = threading.Thread(target=host)    t.start()    sleep(0.1)当然,您需要更改适配器和IP。此外,ping -t在运行代码时使用IP 以便stopFilter()工作。片刻之后,您可以看到记忆正在建立。我认为 libpcap 在 C 中有类似的问题。知道如何解决这个问题吗?环境: Python 3.6.0、Win 7、Scapy 2.4.0(Scapy 2.4.2 中的相同问题)
查看完整描述

1 回答

?
慕工程0101907

TA贡献1887条经验 获得超5个赞

我自己解决了这个问题。简单地去~Lib\site-packages\scapy\sendrecv.py和下


if stop_filter and stop_filter(p): 代替:


sniff_sockets = []

break

和:


for s in sniff_sockets:

     s.close()

del sniff_sockets

return   

现在内存问题消失了。


更新:


上面提到的解决方案,只对 2.4.0 有帮助(没有内存泄漏),但对 2.4.1 和 2.4.2 没有帮助


查看完整回答
反对 回复 2021-12-09
  • 1 回答
  • 0 关注
  • 392 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信