如何显示失败的ping?


24

当我们使用Windows ping时,它将显示失败的ping。Ubuntu有类似的功能吗?

调试网络时,失败的ping非常有用。你们如何解决这个问题?好吧,我只想要简单的解决方案,我不想弄一个长脚本。


2
您能否提供示例输出或屏幕截图来补充问题?
绿色的

1
您要查找的信息还是比其更详细的信息5 packets transmitted, 0 received, 100% packet loss, time 4032ms(如ping终止本身或通过Ctrl + C终止时显示的信息)?您是否正在寻找有关每个ping的单独数据?
伊莱亚·卡根

1
Linux很棒,我们所有人都出于很多原因喜欢它,但是...有时候Windows正确,Linux错误。是的,即使在基本的CLI工具中也是如此。是的,即使在基本的网络CLI工具中!如果在出现问题时没有简便的方法在屏幕上显示消息,那么我们必须承认它是“我们缺少的功能”。我们当然不想假装它是如此复杂,以至于我们无法弄清楚OP到底在问什么(特别是当默认情况下在我们周围的数百万个盒子中启用了该功能时)。
ndemou,2015年

我可能已经发誓该功能在早期的linux ping中已经存在。它也存在于MacOS(基于Unix构建)中。我不应该知道为什么不应该这样做。我有一条断断续续的线路,要找出停电的长度,我需要在输出中进行筛选以寻找跳跃,而不是使线路明显不同。
Silvio Levy

Answers:


26

正确的答案是:没有“ 失败的 ping 失败 ”之类的东西。(总是打印诸如“目标不可达”之类的故障回复,这与根本没有回复是不同的。)

Ping实用程序会打印每个收到的答复,即使它认为更该特定的ping丢失了。完全有可能收到乱序的答复。

即使在我的Android手机,股票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

注意如何首先报告丢失#130,然后#131 之后接收它,最后报告数据包丢失为零。


关于Windows的附加说明:

在Windows上,ping似乎要等待更长的时间,然后声明它丢失,如果稍后出现,则将其忽略。

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


1
+1 -O选项已存在,并且在iputils-ping软件包版本3:20121221-4ubuntu1.1
Xen2050

11

EvgEnZh部分回答了这个问题,但使用了我自己的版本:

ping -O -q 8.8.8.8

这样一来,当回复时间过长或永不回信(-O)时,它会打印一条消息,并在回信时()则禁止显示消息-q。结果是只有在数据包丢失时才获得输出。通过这样做,可以使查找间歇性问题变得更加容易,这样您就不必在中断的几个地方仔细查看一堆“有效”的消息。


请注意,-O触发仅意味着等待时间高于预期。这通常表明存在实际问题,但并非总是如此。我在答案中发布的日志是通过GPRS弱连接获得的,即使在2分钟多的时间内,我只收到了一个乱序答复,但“迟到”中还是有很多答复。糟糕的连接被淹没了好几次,报告连续几次ping丢失,然后几秒钟后它们全部进入了。连接仍然可靠(也许我不知道GPRS是在内部处理重传),即使用于SSH访问,也非常痛苦。
EvgEnZh '18

3

也许ping -f适合您。从ping手册:

-F

洪水ping。对于每个发送的ECHO_REQUEST,将打印一个句号“。'',而对于收到的ECHO_REPLY,则始终打印一个退格键。这样可以快速显示正在丢弃的数据包数量。如果未指定时间间隔,则将时间间隔设置为零,并以最快的速度输出数据包或每秒输出一百次,以较高者为准。只有超级用户可以零间隔使用此选项。

对于每秒1个echo_request,它看起来像 ping -i 1 -f 8.8.8.8


不确定这是否是一项新功能,我可能会看到失败的ping。
王子1986年

您使用哪个选项来报告失败的ping?ping失败会收到什么消息?
Daniel Yuste Aroca

虽然我刚使用ping时,消息像这样$ ping 172.18.1.12 PING 172.18.1.12(172.18.1.12)56(84)字节数据。从172.18.1.224 icmp_seq = 1无法到达目标主机从172.18.1.224 icmp_seq = 2无法从172.18.1.224 icmp_seq = 3目标主机
1986年

2
“目标主机无法访问”与ping超时不同
ndemou 2015年

ping -f并不是答案,因为它没有留下任何记录。所需要的是一种类型的线路,可以成功执行ping操作,而另一种类型的则可以进行失败操作,因此可以立即告诉您(在服务中断的情况下)停电的频率和时间。
Silvio Levy

0

即使使用-v选项,ping也不会这样做。看到这个问题。但是,如果这对您确实很重要(或很有趣),则可以下载源代码,修改代码以包含适当的printf调用。这样做的一个好地方是方法'send_probe'的末尾(12.10的第619行)...

首先,你得到了来源

apt-get source iputils
cd iputils*

进行编辑

gedit ping.c

生成并安装生成的软件包...

apt-get install libsysfs-dev
dpkg-buildpackage

我想这样做(并答覆10次),但肯定有一些缺失。我正在sudo -s下工作。编辑ping.c之后,如果尝试“ make”,则会出现“严重错误:sys / capability.h:没有此类文件”。如果我遵循答案的后两行(apt-get install和dpkg -...),则不会出现任何错误,但我不知道可执行文件的放置位置。旧的可执行文件(/ bin / ping)仍然存在-我知道它在时间戳上已经很旧了,因为它的行为没有任何不同。
Silvio Levy

-1

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

再次感谢。


1
不,不是(至少到2015年1月)“ Destination Host Unreachable”与ping超时不同
ndemou 2015年

为什么这是公认的答案?ping -O -q 8.8.8.8是要走的路。
theV0ID
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.