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

时间:2012-03-21 16:00:33

标签: linux udp network-protocols throttling

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

tc qdisc add dev eth0 root netem loss 50%

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

2 个答案:

答案 0 :(得分: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

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

答案 1 :(得分:4)

使用iptables - 它有一个概率选项,允许你这样做,例如:

iptables -A INPUT -m statistic -p tcp --mode random --probability 0.5 -j DROP

调整各种值以匹配所需的流量/方向/概率。