我正在编写一个使用scapy进行数据包嗅探和解析的Python脚本。这一切都运行良好,我决定尝试将其作为多线程脚本来处理更高流量的处理。
基本的想法是,如果scapy看到一个有趣的数据包,将它扔进队列,让所有工作人员从队列中获取数据包,处理它,然后再返回另一个数据包。这个循环只运行一次,所以我猜测当脚本回到scapy方面时,它不会放手。
我怎样才能得到这个,以便scapy继续在队列中抛出数据包,我的线程可以继续处理排队的数据包?
from scapy.all import *
from Queue import Queue
from threading import Thread
max_threads=10
packetqueue=Queue(maxsize=0)
def queue_packet(packet):
packetqueue.put(packet)
def analyze_packet(q):
while True:
packet=q.get()
<do stuff to packet>
q.task_done()
for i in range(max_threads):
worker=Thread(target=analyze_packet,args=(packetqueue,))
worker.setDaemon(True)
worker.start()
sniff(iface="eth4", filter = "<filter>", store=0, prn=queue_packet)