灵活的流量生成与scapy

Dis*_*roy 4 python generator traffic scapy

我知道这样的问题之前已被问过很多次,但我认为这是微妙的不同.

我正在尝试使用scapy在Python中编写灵活的流量生成器.生成数据包很好,但是当以足够快的速度发送流量时(根据我的需要,在每秒500-700个数据包的范围内),我似乎已经达到了大约20-30 pps的速度.

我相信可能需要线程,或者我更容易丢失一些东西?

And*_*org 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)
Run Code Online (Sandbox Code Playgroud)

但手动在套接字上发送(预先创建)数据包的速度要快得多:

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)
Run Code Online (Sandbox Code Playgroud)

但是将pe.build()移动到循环中会大大降低速度,暗示这是实际的数据包构建需要时间.