當前位置: 首頁>>技術教程>>正文


如何顯示 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/zh-tw/article/13099.html,未經允許,請勿轉載。