我有一个简单的网络服务器设置scapy,它等待回复这样:
connreq = sniff(filter=connfilter, prn=handshake)
在函数握手中执行握手,但我遇到了一个问题,这里是:
answer = sr1(ip/synack, timeout = 4)
发送一个synack并等待答案,如果在4秒内没有收到答复,则握手将被终止。但是,出于某种原因,如果我有多个客户端,我的函数握手将一次只执行一次,因为scapy 等待前一个客户端的答案。
我不希望scapy sniff函数等待,我希望它在任何情况下处理数据包,即使之前的数据包尚未处理。
我熟悉线程功能,但如何将其应用于scapy? (或嗅觉功能?)
答案 0 :(得分:1)
1。
您可以在timeout
函数中尝试sniff
参数。我记得有这样的参数。
connreq = sniff(filter=connfilter, prn=handshake, timeout=4)
2。 如果方法1不起作用,则必须使用多进程来处理此问题。
在服务器端,
import threading
def your_sniff_function():
connreq = sniff(filter=connfilter, prn=handshake)
# save sniff result to local file here
t = threading.Thread(target=your_sniff_function, args=[])
t.start()
t.join(timeout=4) # use timeout here to force termination
# you can start as many subthreads as you want here