【问题标题】:Simulate dropped packets on Linux, based on protocol (UDP, TCP etc)基于协议(UDP、TCP 等)在 Linux 上模拟丢弃的数据包
【发布时间】:2012-06-21 18:51:10
【问题描述】:

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

tc qdisc add dev eth0 root netem loss 50%

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

【问题讨论】:

    标签: linux udp network-protocols throttling


    【解决方案1】:

    这是 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 反射攻击。

    【讨论】:

      【解决方案2】:

      改用 iptables - 它有一个概率选项可以让你这样做,例如:

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

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

      【讨论】:

      • 一切正常。但是当我尝试时: iptables -A OUTPUT -m statistic -p tcp --mode random --probability 0.5 -j DROP my code on Python2.7 return to me: socket.error: [Errno 1] Operation not allowed
      • 有没有可能您没有使用正确的权限运行?另外,不太确定 python 与它有什么关系——你能从命令行运行并确认它在那里工作吗?
      • 见下面的答案,这个选项不是“静默”的,可能会导致调用过程出现问题。
      猜你喜欢
      • 2010-10-11
      • 2021-09-11
      • 1970-01-01
      • 2011-06-02
      • 1970-01-01
      • 2014-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多