同时处理多个 Pcap 文件 - Django

Process Several Pcap Files Simultaneously - Django

本质上,我正在开发的 django 应用程序的用户调用的以下函数使用 Scapy 库处理 80 多个相当大的 pcaps,以便初步解析它们的目标 IP 地址。

我想知道是否可以同时处理多个 pcaps,因为 CPU 没有被充分利用,最好使用多线程

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})

我认为混合使用多处理和 Django 很棘手。我曾经研究过这样的解决方案,最后我决定使用 Celery 和 RabbitMQ。

使用 Celery,您可以轻松定义处理单个 pcap 的任务。然后你可以在后台启动几个独立的worker来处理文件。这样的解决方案会导致架构稍微复杂一些(您需要提供消息队列,例如 RabbitMQ 和 Celery worker),但是您可以获得更简单的代码。

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

就我而言,Celery 节省了很多时间。

你也可以查看这个问题和答案:

您可以使用上面的答案(多处理),并通过使用 PcapReader 生成器而不是 rdpcap 提高 scapy 的读取速度

with PcapReader(filename) as fdesc:
    for pkt in fdesc:
        [actions on the pkt]