我有一个非常简单的脚本,它应该使用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循环。我想过分叉进程,每个进程都会发送数据包,但它仍然留给我循环。
另外 - send()非常慢,但是sendp()不合适,因为我有不同的目的地。
我读过这个:how to send one udp packet multiple time in scapy ?,但那里没有答案。
如何一次发送多个数据包?
由于
答案 0 :(得分:0)
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