如何控制Scapy发送数据包的速度?

Mel*_*ett 4 python networking scapy

Scapy在 SDN 实验中使用伪造随机 tcp 和 udp 流来测试数据包洪泛。但我不知道如何控制Scapy发送数据包的速度。例如,如果我想设置Scapy发送数据包1000包/秒,我该怎么办?

Cuk*_*c0d 6

最有效的方法是将 scapy\xe2\x80\x99ssendpfast一起使用tcpreplay(必须安装):

\n\n
>>> pkt = Ether()/IP()/TCP()/"blobofdata". # must be layer 2\n# let\xe2\x80\x99s send 10000 packets at 1000 packets per seconds\n>>> sendpfast(pkt, pps=1000, loop=10000, parse_results=1)\n{\'packets\': 10000,\n \'bytes\': 660000,\n \'time\': 9.99,\n \'bps\': 66006.1,\n \'mbps\': 0.528,\n \'pps\': 1000.09,\n \'flows\': 1,\n \'fps\': 0.1,\n \'flow_packets\': 100000000,\n \'non_flow\': 0,\n \'successful\': 10000,\n \'failed\': 0,\n \'truncated\': 0,\n \'retried_enobufs\': 0,\n \'retried_eagain\': 0,\n \'command\': \'tcpreplay --intf1=enp0s3 --pps=1000 --loop=10000 /tmp/scapyo6ilzjdk\',\n \'warnings\': []}\n>>>\n
Run Code Online (Sandbox Code Playgroud)\n\n

您甚至可以获得一些统计数据。\n这可以解决 Python 的限制,\xe2\x80\x99 不允许如此高的数据包速率。

\n\n

如果您的目标是降低费率,您可以inter使用send

\n\n
>>> sendp(pkt, count=10000, inter=1./20)  # 20 packets per second\n
Run Code Online (Sandbox Code Playgroud)\n