2012-03-21 137 views

回答

4

用iptables代替 - 它有一个概率的选项,应该让你做到这一点,例如:

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

调整各种值所需的业务/方向/概率匹配。

+0

一切OK。但当我尝试: iptables -A输出-m统计-p tcp - 模式随机 - 概率0.5 -j DROP 我在Python2.7上的代码返回给我: socket.error:[Errno 1]不允许操作 – Xaver 2012-04-26 09:16:42

+0

你有没有正确的权限运行的机会?另外,还不确定python与它有什么关系 - 你可以从命令行运行并确认它在那里工作吗? – 2012-04-26 10:46:07

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