基于协议(UDP,TCP等)在Linux上模拟丢弃的数据包

Ash*_*Ash 1 linux udp throttling network-protocols

我知道我可以使用tc和netem来做

tc qdisc add dev eth0 root netem loss 50%
Run Code Online (Sandbox Code Playgroud)

这将在所有eth0流量中丢弃50%的数据包.但是,我想指定一个协议(UDP,TCP等),因此只会删除此协议的数据包.

小智 8

这是iptables的烦人功能.即使文档说DROP默默地将数据包丢弃在地板上,它仍会告诉调用程序,导致sendmsg(或其他)将errno设置为ENETUNREACH或EPERM.似乎没有一个功能"没有真正默默地丢弃数据包,不告诉任何人有关它".

但是,我找到了以下解决方法:如果数据包将离开本地计算机,则可以在mangle表中将TTL设置为0:

iptables -t mangle -A SomeChain -m ttl -j TTL --ttl-gt 0 --ttl-set 0
Run Code Online (Sandbox Code Playgroud)

我已成功使用它来处理DoS反射攻击.