утечка памяти при использовании scapy сессий - PullRequest
0 голосов
/ 23 ноября 2018

В настоящее время интенсивно используется память scapy 2.4.0 на python 2.7, работающем на centos 7.4

, первоначально я думал, что это из-за https://bitbucket.org/secdev/scapy/issues/5149/rdpcap-and-wrpcap-file-descriptor-leak, но это было исправлено некоторое время назад.

import scapy
from guppy import hpy
import psutil
hp = hpy()


class SessionBuilder(object):
    def __init__(self):
        pass

    def get_sessions(pcap):
        # this heap always reports 50mb usage
        hp.heap()
        process = psutil.Process(os.getpid())
        # I expect this memory to be around 50mb... but that's not always true
        print process.memory_info()
        opened_pcap = rdpcap("pcap_location")
        sessions = opened_pcap.session()
        # this heap always reports 50mb usage
        hp.heap()
        # I expect this memory to be larger which is it
        print process.memory_info()
        return sessions

внутри другого файла python

import SessionBuilder
class session_worker
    def __init__(self):
        self.sb = SessionBuilder()

    def work(self):
        for pcap in pcaps:
            sessions = self.sb.get_sessions(pcap)


        # I then go about doing some things with these sessions

извиняюсь за некоторые ошибки в коде, но он работает в автономной системе, поэтому просто добавил грубую часть того, что я делаю.

каждый раз, когда я обхожу цикл, существует вероятность того, что память из предыдущего цикла останется, и это просто увеличивается до тех пор, пока у меня не останется памяти (не показано в приведенном выше коде, но есть некоторая логика, которая будет игнорировать любой pcapэто больше чем 1/4 доступной памяти на коробке, чтобы scapy мог открыть ее для извлечения сессий)

согласно Использование heapy для отслеживания утечек памяти в приложении Django количество кучи, представляющее память, которую использует python, а не какой-либо основной код cЯ предполагаю, что Scapy использует C внизу?

...