Python 带Scapy和Gevent的数据包构建

Python 带Scapy和Gevent的数据包构建,python,gevent,scapy,Python,Gevent,Scapy,我正在尝试编写一个程序,它使用gevent进行多线程工作 程序将生成一个数据包,使用scapy构建它,然后使用原始套接字发送它。像这样: def worker(...): s = socket.socket(socket.AF_PACKET, socket.SOCK_RAW) s.bind((iface, socket.htons(0x0800))) packet = fragment(Ether()/IP(dst=dst, src=str(src))/TCP(dport

我正在尝试编写一个程序,它使用gevent进行多线程工作

程序将生成一个数据包,使用scapy构建它,然后使用原始套接字发送它。像这样:

def worker(...):
    s = socket.socket(socket.AF_PACKET, socket.SOCK_RAW)
    s.bind((iface, socket.htons(0x0800)))
    packet = fragment(Ether()/IP(dst=dst, src=str(src))/TCP(dport=dport, sport=sport)/pay_load, fragsize=100)
    data = [piece.build() for piece in packet]
    for packet in data:
        s.send(packet)
代码按顺序正常运行,但当我使用gevent生成线程时,它将在
[piece.build()for piece in packet]
处失败,出现
“警告:孩子意外死亡。数据包可能尚未发送到30405”


我所能做的最好的猜测就是如何
Packet。Scapy中的build
在线程下不起作用。有人能帮我找到一个解决方法或其他生成数据包的方法吗?

我和gevent和Scapy在一起从来没有遇到过任何问题。你是否在文件的最顶端进行了猴子补丁?当然,我做了,但问题在于scapy的构建过程,它试图发送数据包(我还不想发送),因此孩子失败并死亡。在这种情况下,
build
方法中可能存在某种错误。也许有必要检查底层源代码,看看问题可能是什么。我也有同样的问题我也有同样的问题(但使用eventlet)。