为了复制数据包而分叉 scapy 的最佳方法是什么

What is the best way to fork scapy in order to duplicate packets

我有一个非常简单的脚本,它应该使用 scapy 复制数据包:

from scapy.all import *
import pprint

ips = [
"192.168.0.1",
"192.168.0.2",
"192.168.0.3",
"192.168.0.4",
"192.168.0.5",
"192.168.0.6",
"192.168.0.7"
]

def dup_pkt(pkt):
        pprint.pprint(pkt)
        if pkt[IP].dst == "10.0.0.1":
                for ip in ips:
                        pkt2 = copy.deepcopy(pkt)
                        pkt2[IP].dst = ip
                        print "Packet1:",pkt[IP].dst,"Packet2:",pkt2[IP].dst
                        send(pkt2)

pkts = sniff(prn=dup_pkt, filter="port 53", store=0, count=2)

我希望不使用 for 循环,而是一次将它发送到多个目的地。我考虑过分叉进程,每个进程都会发送数据包,但它仍然给我留下了 for 循环。

此外 - send() 非常慢,但 sendp() 不适合,因为我有不同的目的地。

我读过这篇文章:how to send one udp packet multiple time in scapy ? 但那里没有答案。

如何一次发送多个数据包?

谢谢

send()函数可以接收要发送的数据包列表:

def dup_pkt(pkt):
    pprint.pprint(pkt)
    if pkt[IP].dst == '10.0.0.1':
        pkts = []
        for ip in ips:
            pkt2 = pkt.copy() # use the copy method rather than copy.deepcopy
            pkt2[IP].dst = ip
            pkts.append(pkt2)
            print "Packet1: ", pkt[IP].dst, " Packet2: ", pkt2[IP].dst
        send(pkts) # send all packets at once