Самый эффективный способ - использовать sendpfast
от scapy вместе с tcpreplay
(он должен быть установлен):
>>> pkt = Ether()/IP()/TCP()/"blobofdata". # must be layer 2
# let’s send 10000 packets at 1000 packets per seconds
>>> sendpfast(Ether()/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, которые не позволяют использовать такую высокую скорость пакетов.
Если вы стремитесь к более низким ставкам, вы можете использовать inter
с send
>>> sendp(pkt, count=10000, inter=1./20) # 20 packets per second