Ping
如何使用 ping 命令設置短超時?
我正在嘗試編寫一個腳本,列出我區域網路上的所有主機(大約有 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
初始目標超時(以毫秒為單位)