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

标签 python networking scapy

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

最佳答案

最有效的方法是将 scapy 的 sendpfasttcpreplay 一起使用(必须安装):

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

>>> sendp(pkt, count=10000, inter=1./20)  # 20 packets per second

关于python - 如何控制Scapy发送数据包的速度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55057348/

相关文章:

python - 使用 SQLAlchemy 检索 ORM 属性

python - 在迭代值之前在列表理解期间测试列表中的值类型?

python - 如何在 Python 文档字符串测试中处理四舍五入到负零

sockets - 操作系统如何在接受同一个套接字的多个进程之间进行负载平衡?

networking - 识别假 UDP 数据包

python - Scapy - 从 FieldLenField 引用多个字段

python - 在Python中使用concurrent.futures.ProcessPoolExecutor时为每个进程创建一个单独的记录器

docker - 在 docker-compose 中的同一个端口上运行多个服务

python - Scapy 的低性能

python - 使用 python 和 scapy 发送数据包到本地地址不起作用