当前位置: 首页>>技术教程>>正文


如何显示 ping 失败?

问题描述

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

在调试网络时,失败的 ping 非常有用。你们是怎么解决这个问题的?好吧,我只想要简单的解决方案,我不想得到很长的脚本。

最佳答案

当 Windows 的 ping 显示“请求超时”时,这本身并不是错误。微软随意选择了 4 秒的超时,之后他们假设 “failure” 并报告它。如果您要从火星 ping 任何东西,那肯定是误报,但即使在地球上 RTT(round-trip 时间)超过 4 秒也是完全可能的。超时可通过 /w <millisec> 开关进行配置。

在 Linux 上,ping 实用程序不会假定超时是失败的,并且不会等待回复。通常,它会立即打印所有收到的回复和 as-is,包括 “late” 回复、out-of-order 回复、重复回复和冲突回复(例如 “Destination unreachable” 之后的有效回复)。

话虽如此,通常有一些选项可以查看何时没有收到太久的回复。即使在我的 Android 手机上,股票 ping 实用程序也支持以下 2 个选项:

  • -D 在每条消息之前打印一个时间戳,使间隙更容易被发现。

  • -O 在发送下一个 ping 之前未收到回复时打印一条消息,这或多或少是询问的内容。不过,”timeout” 固定为 ping 间隔( -i )。

但是,这些选项似乎并非在所有地方都受支持(例如,据我所知,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是如何先上报”missing”,然后在#131之后收到,最后报丢包为零。 Windows 的 ping 永远不会给出这样的结果:它等到回复或超时,然后才发送下一个 ping,忽略任何迟到或非第一次回复。

次佳答案

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

ping -O -q 8.8.8.8

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

第三种答案

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

\\n

-f

\\n

Flood ping. For every ECHO_REQUEST sent a period ”.” is printed,\\n while for ever ECHO_REPLY received a backspace is printed. This\\n provides a rapid display of how many packets are being dropped. If\\n interval is not given, it sets interval to zero and outputs packets as\\n fast as they come back or one hundred times per second, whichever is\\n more. Only the super-user may use this option with zero interval.

\\n

每秒 1 echo_request 它看起来像 ping -i 1 -f 8.8.8.8

第四种答案

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

再次感谢。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/13099.html,未经允许,请勿转载。