Одновременная обработка нескольких файлов Pcap - Django - PullRequest
0 голосов
/ 09 июня 2018

По сути, следующая функция, вызываемая пользователем разрабатываемого мною приложения django, использует библиотеку Scapy для обработки 80 с лишним довольно больших pcaps, чтобы первоначально проанализировать их IP-адреса назначения.

Мне было интересно, можно ли обрабатывать несколько пакетов одновременно, так как процессор не загружен до полной мощности, в идеале, используя многопоточность

def analyseall(request):
    allpcaps = Pcaps.objects.all()
    for individualpcap in allpcaps:
        strfilename = str(individualpcap.filename)
        print(strfilename)
        pcapuuid = individualpcap.uuid
        print(pcapuuid)
        packets = rdpcap(strfilename)
        print("hokay")
        for packet in packets:
            if packet.haslayer(IP):
    #            print(packet[IP].src)

     #       print(packet[IP].dst)
                dstofpacket = packet[IP].dst

                PcapsIps.objects.update_or_create(ip=dstofpacket, uuid=individualpcap)

    return render(request, 'about.html', {"list": list})

Ответы [ 2 ]

0 голосов
/ 13 июня 2018

Вы можете использовать вышеуказанный ответ (многопроцессорность), а также улучшить скорость чтения scapy, используя генератор PcapReader вместо rdpcap

with PcapReader(filename) as fdesc:
    for pkt in fdesc:
        [actions on the pkt]
0 голосов
/ 12 июня 2018

Я считаю смешивание многопроцессорным и хитрым Django.Однажды я работал над таким решением и, наконец, решил использовать Celery и RabbitMQ.

Используя Celery, вы можете легко определить задачу обработки одного pcap.Затем вы можете запустить несколько независимых работников для обработки файлов в фоновом режиме.Такое решение приведет к немного более сложной архитектуре (вам необходимо предоставить очередь сообщений, например, RabbitMQ и сотрудники Celery), однако вы можете получить гораздо более простой код.

http://docs.celeryproject.org/en/latest/django/first-steps-with-django.html

В моем случае сельдерей сэкономил много времени.

Вы также можете проверить этот вопрос и ответы:

Какиспользовать многопроцессорный модуль Python в представлении Django

...