【问题标题】:Send a new packet without waiting for the previous packet reply无需等待前一个数据包回复就发送一个新数据包
【发布时间】:2015-05-10 13:20:02
【问题描述】:

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

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

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

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

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

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

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

【问题讨论】:

  • 你的意思是你不希望嗅探功能在网络服务器端等待?
  • @m170897017 是的,我希望它同时处理多个客户端,而不是等待最后一个客户端“完成”

标签: python packet scapy reply


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-23
    相关资源
    最近更新 更多