如何静默丢弃一些传出数据包?

Fak*_*ame 8 networking iptables

我正在对我正在处理的应用程序进行一些测试,我需要能够在短时间内以静默方式丢弃传出的 UDP 数据包以复制可能的故障模式。

有没有办法做到这一点?

注意:iptables DROP 对于传出的消息不是沉默的!当一个send()或类似的电话被 掉线时iptables,它会EPERM由于某种奇怪的原因返回(请参阅此处。不幸的是,我无法使用该答案,因为我的目的地只有一跳之遥)。

xtables-addons 曾经有一个STEAL动词,但几年前它无缘无故被删除了。


我现在尝试在路由表中使用虚假路由,不幸的是,这似乎破坏通信流量的两个方向。
对于我需要做的测试,我必须允许入站UDP 流量,一旦我安装了虚假路由,流传入的数据包立即停止,尽管源仍在发送它们。

yae*_*shi 2

添加虚拟接口并设置到该接口的路由怎么样?

# ip link add dummy0 type dummy
# ip link set dev dummy0 up
# ip route add 8.8.8.8/32 dev dummy0
# ping -c3 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.

--- 8.8.8.8 ping statistics ---
3 packets transmitted, 0 received, 100% packet loss, time 2015ms
Run Code Online (Sandbox Code Playgroud)

它始终向 上的任何(邻居或远程)地址发送数据包dummy0

# tshark -i dummy0
Running as user "root" and group "root". This could be dangerous.
Capturing on 'dummy0'
  1   0.000000   10.10.0.59 -> 8.8.8.8      ICMP 98 Echo (ping) request  id=0x1ce0, seq=1/256, ttl=64
  2   1.007348   10.10.0.59 -> 8.8.8.8      ICMP 98 Echo (ping) request  id=0x1ce0, seq=2/512, ttl=64
  3   2.015394   10.10.0.59 -> 8.8.8.8      ICMP 98 Echo (ping) request  id=0x1ce0, seq=3/768, ttl=64
Run Code Online (Sandbox Code Playgroud)