В моей системе я получаю намного лучшую производительность при отправке кадров Ethernet с помощью sendp по сравнению с отправкой IP-пакетов с помощью send.
# this gives appox 500pps on my system
pe=Ether()/IP(dst="10.13.37.218")/ICMP()
sendp(pe, loop=True)
# this gives approx 100pps on my system
pi=IP(dst="10.13.37.218")/ICMP()
send(pi, loop=True)
Но отправка (предварительно обработанный) пакета в сокет вручную происходит намного быстрее:
s = socket.socket(socket.AF_PACKET, socket.SOCK_RAW)
s.bind(("eth0", 0))
pe=Ether()/IP(dst="10.13.37.218")/ICMP()
data = pe.build()
while True:
s.send(data)
Но перемещение pe.build () в цикл резко снижает скорость, намекая на то, что для построения пакета требуется время.