我正在尝试编写一个使用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"
处失败。
我能做的最好的猜测是Scapy中的Packet.build
不能在线程下工作。任何人都可以帮助解决方法或其他方式来生成数据包吗?