私のシステムでは、send を使用して IP パケットを送信する場合と比較して、sendp を使用してイーサネット フレームを送信すると、はるかに優れたパフォーマンスが得られます。
# 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() をループに移動すると速度が大幅に低下し、時間がかかるのは実際のパケット構築であることを示唆しています。