本质上,由我正在开发的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})
答案 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节省了很多时间。
您还可以查看此问题和答案: