linux - 基于协议(protocol)(UDP、TCP 等)在 Linux 上模拟丢包

标签 linux udp network-protocols throttling

我知道我可以使用 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/

相关文章:

c - Arduino的MODBUS协议(protocol)

ios - 通过本地网络从 iOS 设备浏览桌面文件

actionscript-3 - 协议(protocol)简单性与 "properness"

javascript - 将 React 应用程序作为后台进程运行

c++ - Linux 3.14 关闭过早退出程序的文件句柄时的策略

linux - IPTables 如何阻止特定的 UDP 数据包?

Linux UDP 套接字 : select() is not notified?

html - 在 html 视频对象中播放 udp 流

linux - 在循环中读取是/否选项,不起作用

linux - nginx 正在下载 index.php 而不是显示页面