我正在使用Scapy来伪造随机的tcp和udp流,以在我的SDN实验中测试数据包泛滥。但是我不知道如何控制Scapy发送包的速度。例如,如果我想设置Scapy发送数据包1000 pkt/s,我应该怎么做?
Scapy
zlwx9yxi1#
最有效的方法是将scapy的sendpfast与tcpreplay一起使用(必须安装):
sendpfast
tcpreplay
>>> pkt = Ether()/IP()/TCP()/"blobofdata". # must be layer 2 # let’s send 10000 packets at 1000 packets per seconds >>> sendpfast(pkt, pps=1000, loop=10000, parse_results=1) {'packets': 10000, 'bytes': 660000, 'time': 9.99, 'bps': 66006.1, 'mbps': 0.528, 'pps': 1000.09, 'flows': 1, 'fps': 0.1, 'flow_packets': 100000000, 'non_flow': 0, 'successful': 10000, 'failed': 0, 'truncated': 0, 'retried_enobufs': 0, 'retried_eagain': 0, 'command': 'tcpreplay --intf1=enp0s3 --pps=1000 --loop=10000 /tmp/scapyo6ilzjdk', 'warnings': []} >>>
你甚至得到一些统计数据。这允许解决Python的限制,不允许如此高的数据包速率。如果您的目标是更低的速率,则可以使用send中的inter
send
inter
>>> sendp(pkt, count=10000, inter=1./20) # 20 packets per second
snz8szmq2#
我花了很多时间来理解和找到如何在其他然后eth0接口发送数据包。我的任务是-创建UDP洪水。在sendp中,我可以有随机的udp端口,但是速度很低,在这种情况下,如果你有一个好的CPU,你可以用sendpfast来获得速度,但是只重复相同的数据包,并且这个'Fuzz/RandString' dosent工作。'Parse_reuslts'在我的情况下是有效的。
conf.iface='eth1' pkt = Ether()/IP(dst="20.20.20.2")/fuzz(UDP())/Raw(RandString(size=1400)) sendpfast(pkt, mbps=1000, loop=50000)
bjg7j2ky3#
我使用iperf3测量了两个节点之间的以太网速度。我得到1.53 Gbytes,而测量速度与sendpfast最大我得到的是58.7Mb。如果你使用的是sedpfast,你最终可能会得到26倍慢的速度。作为信息。
1.53 Gbytes
58.7Mb
3条答案
按热度按时间zlwx9yxi1#
最有效的方法是将scapy的
sendpfast
与tcpreplay
一起使用(必须安装):你甚至得到一些统计数据。这允许解决Python的限制,不允许如此高的数据包速率。
如果您的目标是更低的速率,则可以使用
send
中的inter
snz8szmq2#
我花了很多时间来理解和找到如何在其他然后eth0接口发送数据包。我的任务是-创建UDP洪水。在sendp中,我可以有随机的udp端口,但是速度很低,在这种情况下,如果你有一个好的CPU,你可以用sendpfast来获得速度,但是只重复相同的数据包,并且这个'Fuzz/RandString' dosent工作。'Parse_reuslts'在我的情况下是有效的。
bjg7j2ky3#
我使用iperf3测量了两个节点之间的以太网速度。我得到
1.53 Gbytes
,而测量速度与sendpfast最大我得到的是58.7Mb
。如果你使用的是sedpfast,你最终可能会得到26倍慢的速度。作为信息。