使用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,则不会发生这种情况。
我猜:
- 可能是目标机器处理icmp包的系统内核参数引起的
- 可能是icmp包路由切换策略引起的。
内核硬限制ICMP报文速率以防止DDOS攻击。通常每秒只发送 1 个数据包。几乎不可能比任何外部(互联网)路由器更快地获得任何东西。 Example
在 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,则不会发生这种情况。
我猜:
- 可能是目标机器处理icmp包的系统内核参数引起的
- 可能是icmp包路由切换策略引起的。
内核硬限制ICMP报文速率以防止DDOS攻击。通常每秒只发送 1 个数据包。几乎不可能比任何外部(互联网)路由器更快地获得任何东西。 Example