为了复制数据包,fork scapy的最佳方法是什么

时间:2015-07-28 10:54:21

标签: python udp fork scapy 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循环。我想过分叉进程,每个进程都会发送数据包,但它仍然留给我循环。

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

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

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

由于

1 个答案:

答案 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