Scapy stop_filter 导致巨大的内存泄漏
Scapy stop_filter is causing huge memory leak
我有一个启动虚拟主机的应用程序。我注意到随着时间的推移,记忆力正在迅速积累。经过多次尝试寻找原因,结果发现原因是在 scapy
.
中使用了 stop_filter
下面的简化代码是可以运行的,你可以copy/paste:
from scapy.all import *
import threading
from time import sleep
def stopFilter(packet):
if ICMP in packet:
if packet[1].dst == '192.168.0.70':
print('packet found')
return True
def 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()
起作用。片刻之后,您可以看到内存正在累积。
知道如何解决这个问题吗?
环境: Python 3.6.0,Win 7,Scapy 2.4.0(Scapy 2.4.2 中的相同问题)
我自己解决了这个问题。只需转到 ~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 中没有帮助
我有一个启动虚拟主机的应用程序。我注意到随着时间的推移,记忆力正在迅速积累。经过多次尝试寻找原因,结果发现原因是在 scapy
.
stop_filter
下面的简化代码是可以运行的,你可以copy/paste:
from scapy.all import *
import threading
from time import sleep
def stopFilter(packet):
if ICMP in packet:
if packet[1].dst == '192.168.0.70':
print('packet found')
return True
def 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()
起作用。片刻之后,您可以看到内存正在累积。
知道如何解决这个问题吗?
环境: Python 3.6.0,Win 7,Scapy 2.4.0(Scapy 2.4.2 中的相同问题)
我自己解决了这个问题。只需转到 ~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 中没有帮助