同时处理多个 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]
本质上,我正在开发的 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]