我想在同一個程序中運行2個阻塞循環。 在我的程序中,我使用nfqueue來攔截數據包。當隊列被創建時,它開始等待數據包並阻止程序。當數據包到達時,它會調用cb()函數,然後再次開始監聽新數據包。在同一個程序中運行2個阻塞循環
這裏是我的程序:
import nfqueue, socket
from scapy.all import *
import os
os.system('iptables -t mangle -A PREROUTING -j NFQUEUE --queue-num 1')
os.system('iptables -t mangle -A POSTROUTING -j NFQUEUE --queue-num 2')
count = 0
def cb(payload):
global count
count +=1
data = payload.get_data()
p = IP(data)
print str(count) + ": TOS = " + str(p.tos)
payload.set_verdict(nfqueue.NF_ACCEPT)
def run_queue(queue_num):
print "Preparing the queue"
q = nfqueue.queue()
q.open()
q.unbind(socket.AF_INET)
q.bind(socket.AF_INET)
q.set_callback(cb)
q.create_queue(queue_num)
try:
print "Running the queue"
q.try_run()
except KeyboardInterrupt, e:
print "interruption"
q.unbind(socket.AF_INET)
q.close()
run_queue(1)
run_queue(2)
我怎麼能在同一程序運行2個以上這些封環?
任何幫助將不勝感激。 謝謝!
提示:你需要使用線程,運行每個環上的一個單獨的一個 – goncalopp
但在創建第一個線程時,阻塞循環將啓動,然後無法創建第二個線程 – HaTiMuX
@HaTiMuX阻塞循環應該在其自己的線程中運行,因此它不會阻塞主線程的執行。 – dano