1

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

该程序将生成一个数据包,使用 scapy 构建它,然后使用 raw_socket 发送它。像这样:

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]"WARNING: Child died unexpectedly. Packets may have not been sent 30405".

我能做的最好的猜测是Packet.build在 Scapy 中以某种方式在线程下不起作用。任何人都可以帮助解决方法或其他方式来生成数据包吗?

4

0 回答 0