我知道我可以使用 tc 和 netem 来做
tc qdisc add dev eth0 root netem loss 50%
这会丢弃所有 eth0 流量中 50% 的数据包。但是,我想指定一个协议(protocol)(UDP、TCP 等),因此只会丢弃该协议(protocol)的数据包。
最佳答案
这是 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 反射攻击。
关于linux - 基于协议(protocol)(UDP、TCP 等)在 Linux 上模拟丢包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9808321/