У меня есть приложение, которое запускает виртуальные хосты. Я заметил, что память быстро растет со временем. После многих попыток найти причину выясняется, что причиной является stop_filter
в scapy
.
Работает следующий упрощенный код, вы можете просто скопировать / вставить:
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()
работал. Уже через несколько секунд вы можете видеть, что память накапливается. Я думаю, что аналогичная проблема в C с libpcap.
Есть идеи, как это решить?
Среда: Python 3.6.0, Win 7, Scapy 2.4.0 (та же проблема в Scapy 2.4.2)