发送一个新数据包而不等待前一个数据包回复

Send a new packet without waiting for the previous packet reply

我已经用 scapy 设置了一个简单的网络服务器,它等待这样的回复:

connreq = sniff(filter=connfilter, prn=handshake)

在函数handshake中进行了握手,但我遇到了某个问题,这里是:

answer = sr1(ip/synack, timeout = 4)

发送synack并等待回答,如果4秒内没有收到回答则握手终止。但是,出于某种原因,如果我有多个客户端,我的函数握手将一次只执行一个,因为 scapy 等待前一个客户端的回答

我不希望 scapy 嗅探函数等待,我希望它在任何情况下都处理一个数据包,即使之前的数据包尚未处理。

我熟悉函数的线程化,但如何将其应用于 scapy? (或嗅探功能?)

1。 您可以在 sniff 函数中尝试 timeout 参数。我记得有这样的参数。

connreq = sniff(filter=connfilter, prn=handshake, timeout=4)

2。 如果方法一不行,就得用多进程来处理了。

在服务器端,

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