如何显示失败的ping?

王子1*_*986 38 ping

当我们使用 windows ping 时,它会显示失败的 ping。Ubuntu 有没有类似的功能?

在调试网络时,失败的 ping 非常有用。大家怎么解决的?嗯,我只想要简单的解决方案,我不想得到一个很长的脚本。

Evg*_*nZh 41

正确答案是:不存在“失败丢失ping”这样的东西。(像“Destination unreachable”这样的失败回复总是被打印出来,这与根本没有回复不同。)

Ping 实用程序打印每个收到的回复,即使它更确定这个特定的 ping 丢失了。完全有可能收到乱序的回复。

即使在我的 Android 手机上,stock ping 实用程序也支持这两个选项:
-D在每条消息之前打印时间戳
-O在未及时收到回复时打印消息,这或多或少是被问到的
然而,这些选项似乎并非在任何地方都得到支持(例如,据我所知,Debian Wheezy 缺少它们,而 Jessie 拥有它们。busybox ping不支持它们)。

这是我设法获得的示例输出(跳过了不重要的 ping 回复):

u0_a93@NX505J:/ $ ping -D -O 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
[1440545014.805478] 64 bytes from 8.8.8.8: icmp_seq=1 ttl=244 time=116 ms
~~~~~~~~~~
[1440545142.995443] 64 bytes from 8.8.8.8: icmp_seq=129 ttl=244 time=110 ms
[1440545144.885601] no answer yet for icmp_seq=130
[1440545145.455485] 64 bytes from 8.8.8.8: icmp_seq=131 ttl=244 time=568 ms
[1440545145.455780] 64 bytes from 8.8.8.8: icmp_seq=130 ttl=244 time=1569 ms
[1440545146.005850] 64 bytes from 8.8.8.8: icmp_seq=132 ttl=244 time=119 ms
~~~~~~~~~~
[1440545254.055962] 64 bytes from 8.8.8.8: icmp_seq=240 ttl=244 time=115 ms
^C
--- 8.8.8.8 ping statistics ---
240 packets transmitted, 240 received, 0% packet loss, time 239250ms
rtt min/avg/max/mdev = 109.062/138.757/1569.620/101.608 ms, pipe 2
Run Code Online (Sandbox Code Playgroud)

注意#130是如何先报告丢失的,然后#131之后接收,最后报告丢包为零。


关于 Windows 的额外说明:

在 Windows 上,ping 似乎等待更长时间的回复,然后声明它丢失并在稍后出现时忽略它。

默认情况下,间隔为 1 秒,超时为 4 秒,因此:
在低 RTT 下,将以 1 秒的间隔发送 ping。
在 RTT>4 时,ping 将以 4 秒的间隔(或 5,不确定)发送,并且都将报告为失败,就像服务器没有响应一样。

  • +1 表示“-O”选项,在 iputils-ping 软件包版本 3:20121221-4ubuntu1.1 的 Ubuntu trusty(和 Linux Mint 17.2)中存在并且运行良好 (4认同)

Aze*_*ale 23

部分脱离了 EvgEnZh 的答案,但使用了我自己的版本:

ping -O -q 8.8.8.8
Run Code Online (Sandbox Code Playgroud)

这使得它在回复时间过长或永不返回时打印一条消息 ( -O) 并在消息返回时抑制消息 ( -q)。结果是您只有在数据包丢失时才会得到输出。这样做可以使发现间歇性问题变得更加容易,这样您就不必为它坏了的几个地方筛选一堆“它有效”的消息。


王子1*_*986 -4

感谢所有的答案。最新的 ubuntu ping 似乎可以显示 ping 失败。

再次感谢。

  • 为什么这是公认的答案?`ping -O -q 8.8.8.8` 是正确的方法。 (2认同)