发送一个新数据包而不等待前一个数据包回复
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
我已经用 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