为什么 ping -f 命令需要 sudo 权限?

为什么 ping -f 命令需要 sudo 权限?

当我尝试ping -f ipaddress在 Ubuntu 中使用命令测试我的系统时,它失败并显示一条消息:

 ping: cannot flood; minimal interval, allowed for user, is 200ms

当我输入 man ping 并看到 -f 选项时,它显示

Only the super-user may use this option with zero interval.

为什么需要那个特权?

答案1

man ping

-f
泛洪 ping。对于每个发送的 ECHO_REQUEST,都会打印一个句点“。”,而对于每个收到的 ECHO_REPLY,都会打印一个退格键。这可以快速显示丢弃了多少数据包。如果没有给出间隔,它会将间隔设置为零,并以数据包返回的速度或每秒一百次(以较大者为准)输出数据包。只有超级用户才能使用零间隔的此选项。

很明显,禁止这样做是为了降低网络流量,从而降低由于每个到达数据包的大量回复而导致的 DDOS 威胁。

答案2

这是因为只有超级用户可以指定小于 0.2 秒的间隔。而 -f 就像非常小的间隔。

PS 自提交以来https://github.com/iputils/iputils/commit/0ccdbb9937a90f4c765fe9ab94d1441dd8680f45现在是 0.002 秒。所以,这只是一个虚假的保护。

答案3

将它与 Windows 进行比较是没有意义的ping,因为它们基本上来自两个不同的起源。

很久以前,当网络很容易拥挤时,这被用来防止用户随意运行该命令,导致网络无法使用。您可以查看原始traceroute命令的源代码,其中的内容如下

此命令必须由 root 或 setuid 运行(我建议您不要将其设为 setuid——随意使用可能会导致我们糟糕的、拥挤的网络出现大量不必要的流量)。

所以直到现在,这更像是提醒或者预防措施,比安全功能

引用提交信息https://github.com/iputils/iputils/commit/0ccdbb9937a90f4c765fe9ab94d1441dd8680f45

注意:我们设置最低限制只是为了确保人们不会 偶然DoS 本身。这与安全性无关(如果用户想要)。

相关内容