同时处理几个Pcap文件 - Django

时间:2018-06-09 17:41:48

标签: django multithreading python-3.x scapy pcap

本质上,由我正在开发的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})

2 个答案:

答案 0 :(得分:1)

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

cell.stepperObservation = cell.stepper.observe(\.value, options: [.new]) { (stepper, change) in
    print(change.newValue!)
}

答案 1 :(得分:0)

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

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

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

在我看来,Celery节省了很多时间。

您还可以查看此问题和答案:

How to use python multiprocessing module in django view