![当 iptables REJECT-s 时 ping 不会终止](https://linux22.com/image/104217/%E5%BD%93%20iptables%20REJECT-s%20%E6%97%B6%20ping%20%E4%B8%8D%E4%BC%9A%E7%BB%88%E6%AD%A2.png)
如果网络接口断开:
ping 8.8.8.8
connect: Network is unreachable
很好地终止
内核正在向 ping 发送特定信号
,因此 ping 正在自行关闭。
但是如果网络接口已启动并且
我通过 iptables 阻止所有流量..
vi /etc/sysconfig/iptables
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A OUTPUT -j REJECT --reject-with icmp-net-unreachable
-A INPUT -j DROP
-A FORWARD -j DROP
COMMIT
但不会使 ping 关闭。并停止。
ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
From 192.168.0.100 icmp_seq=1 Destination Net Unreachable
From 192.168.0.100 icmp_seq=1 Destination Net Unreachable
From 192.168.0.100 icmp_seq=1 Destination Net Unreachable
它只是继续下去。
我尝试过其他 --拒绝-with旗帜
例如:
icmp-net-unreachable
icmp-host-unreachable
icmp-port-unreachable
icmp-proto-unreachable
icmp-net-prohibited
icmp-host-prohibited
icmp-admin-prohibited
他们都不能让 ping 退出。
我想看到的是 ping 终止的方式
与网络接口断开连接时终止的方式相同。
如果这不能通过 iptables 完成..
是否有一个命令我可以运行来发送 ping
内核发送的相同信号.. 告诉它“网络接口未连接”?
(这将是一个谎言,但我希望它基本上自行关闭)
答案1
使用默认选项,Linux 上的 ping 永远不会自行停止,除非无法发送数据包。
如果过滤数据包,ping 命令仍然能够发送数据包,并且它们将在网络堆栈中被丢弃/拒绝。
如果想自动停止,可以使用-c选项。示例:
ping -c 4 8.8.8.8
在这种情况下,ping 将在 4 个数据包后停止,无论它们是否通过。
以下是官方手册的摘录:
-c count Stop after sending count ECHO_REQUEST packets. With deadline option, ping waits for count ECHO_REPLY packets, until the time‐ out expires.