Ping

如何使用 ping 命令設置短超時?

  • February 3, 2022

我正在嘗試編寫一個腳本,列出我區域網路上的所有主機(大約有 20 個),並在每個主機旁邊寫下 ping 狀態。我有 DHCP 租約文件,所以我有所有的 IP(比如 10.0.0.1、10.0.0.2 等),我只需要每個主機的 ping 狀態。

因此,我的腳本為每個主機啟動一個 ping:

ping -c 1 10.0.0.1

不幸的是,當主機離線時,ping 需要很長時間才能超時。我檢查了man ping,似乎有兩個選項可以設置超時延遲:-w deadline-W timeout。我想我對後者感興趣。

所以我嘗試了這個:

ping -c 1 -W 1 10.0.0.1

但是每個離線主機等待一秒鐘仍然太長了。我試圖將其設置為低於一秒,但它似乎根本沒有考慮該參數:

ping -c 1 -W 0.1 10.0.0.1  # timeout option is ignored, apparently

有沒有辦法將超時設置為較低的值?如果沒有,是否有任何替代方案?

編輯

  • 作業系統是 Debian Lenny。
  • 我試圖 ping 的主機實際上是接入點。它們與使用者在同一個 vlan 和子網中(為了簡化部署和更換)。這就是為什麼我不想掃描所有子網(ping -b例如)。

編輯#2

我接受了fping解決方案(感謝所有其他答案)。該命令完全符合我的要求:

fping -c1 -t500 10.0.0.1 10.0.0.2 10.0.0.3 10.0.0.4

此命令最多需要 500 毫秒才能完成,並立即為我提供所有主機的 ping 狀態:

10.0.0.1 : [0], 84 bytes, 5.71 ms (5.71 avg, 0% loss)
10.0.0.2 : [0], 84 bytes, 7.95 ms (7.95 avg, 0% loss)
10.0.0.3 : [0], 84 bytes, 16.1 ms (16.1 avg, 0% loss)
10.0.0.4 : [0], 84 bytes, 48.0 ms (48.0 avg, 0% loss)

10.0.0.1 : xmt/rcv/%loss = 1/1/0%, min/avg/max = 5.71/5.71/5.71
10.0.0.2 : xmt/rcv/%loss = 1/1/0%, min/avg/max = 7.95/7.95/7.95
10.0.0.3 : xmt/rcv/%loss = 1/1/0%, min/avg/max = 16.1/16.1/16.1
10.0.0.4 : xmt/rcv/%loss = 1/1/0%, min/avg/max = 48.0/48.0/48.0

在 Debian Lenny 上,安裝很簡單:

aptitude update
aptitude install fping

fping可能是比您使用的庫存 ping 更好的工具。你在什麼作業系統上?

  • “fping 與 ping 的不同之處在於您可以在命令行上指定任意數量的目標,或者指定一個包含要 ping 的目標列表的文件。”
  • “在超時或回復之前,fping 不會發送到一個目標,而是發送一個 ping 數據包並以循環方式移動到下一個目標。”
  • “與 ping 不同,fping 旨在用於腳本,因此其輸出旨在易於解析。”

例子:

fping -c1 -t500 10.0.0.1 10.0.0.2 10.0.0.3 10.0.0.4
  • -c要發送到每個目標的請求數據包數。
  • -t初始目標超時(以毫秒為單位)

引用自:https://serverfault.com/questions/200468