4

このような質問が以前にも何度も出されたことは知っていますが、これは微妙に異なると思います。

scapy を使用して Python で柔軟なトラフィック ジェネレーターを作成しようとしています。パケットの生成は問題ありませんが、トラフィックを十分に速い速度で送信するとなると (私のニーズでは、1 秒あたり 500 ~ 700 パケットの範囲のどこか)、約 20 ~ 30 pps で壁にぶつかったようです。

スレッド化が必要になる可能性があると思いますか、それとももっと簡単なものがありませんか?

4

2 に答える 2

7

私のシステムでは、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() をループに移動すると速度が大幅に低下し、時間がかかるのは実際のパケット構築であることを示唆しています。

于 2011-09-23T19:33:46.867 に答える