使用scapy高频发送UDP ping,为什么只收到前几个ICMP端口不可达报文?

use scapy to send UDP ping with a high frequency, why only receive the first few ICMP port unreachable message?

在 linux 系统中,我使用 scapy 发送高频 UDP ping。例如:每20毫秒,发送一个UDP包;一共100个。但是我只能得到前几个ICMP端口不可达的回答。

 pkt = IP(dst=dst)/UDP(dport=RandShort())
 ans,_ = sr(pkt*100, inter=0.02, timeout=3)

我尝试用tcpdump抓包,发现所有的UDP包都发到了目标机上,只有少数ICMP包返回到源机。什么会导致这种情况?

如果我使用 ICMP ping,则不会发生这种情况。

我猜:

  1. 可能是目标机器处理icmp包的系统内核参数引起的
  2. 可能是icmp包路由切换策略引起的。

内核硬限制ICMP报文速率以防止DDOS攻击。通常每秒只发送 1 个数据包。几乎不可能比任何外部(互联网)路由器更快地获得任何东西。 Example