Ping komutuyla nasıl kısa bir zaman aşımı ayarlayabilirim?


49

LAN'ımdaki tüm ana bilgisayarları listeleyen bir komut dosyası yazmaya çalışıyorum (yaklaşık 20 tanesi var) ve her ana bilgisayarın yanına ping durumu yazıyor. DHCP leasing dosyam var, bu yüzden tüm IP'lere sahibim (örneğin, 10.0.0.1, 10.0.0.2, vb.), Tek ihtiyacım olan her ana bilgisayar için ping durumu.

Bu yüzden, betiğim her ana bilgisayar için tek bir ping başlattı:

ping -c 1 10.0.0.1

Ne yazık ki, bir ana bilgisayar çevrimdışı olduğunda, ping zaman aşımına uğramak için uzun zaman alıyor. Kontrol ettim man ping, zaman aşımı gecikmesini ayarlamak için iki seçenek var gibi görünüyor: -w deadlineve -W timeout. Sanırım ikincisiyle ilgileniyorum.

Bu yüzden bunu denedim:

ping -c 1 -W 1 10.0.0.1

Ancak çevrimdışı ana bilgisayar başına bir saniye beklemek hala çok uzun. Bir saniyenin altına ayarlamaya çalıştım, ancak parametreyi hiç dikkate almıyor gibi görünüyor:

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

Zaman aşımını daha düşük bir değere ayarlamanın bir yolu var mı? Olmazsa, alternatif var mı?

Düzenle

  • İşletim sistemi Debian Lenny.
  • Pinglemeye çalıştığım ana bilgisayarlar aslında erişim noktaları. Kullanıcılar ile aynı vlan ve alt ağdalar (dağıtım ve değiştirme kolaylığı için). Bu yüzden tüm alt ağı taramak istemiyorum ( ping -börneğin bir).

# 2 düzenleyin

fpingÇözümü kabul ettim (diğer tüm cevaplar için teşekkürler). Bu komut tam olarak aradığım şeyi yapıyor:

fping -c1 -t500 10.0.0.1 10.0.0.2 10.0.0.3 10.0.0.4

Bu komutun tamamlanması en fazla 500ms alır ve aynı anda tüm ana bilgisayarların ping durumunu verir:

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'de kurulum çok önemlidir:

aptitude update
aptitude install fping

Yanıtlar:


41

fping kullanmakta olduğunuz stok numarasından daha iyi bir araç olabilir. Hangi işletim sistemi kullanıyorsunuz?

  • "fping, ping komutundan farklı olarak komut satırında istediğiniz sayıda hedef belirtebileceğinizden veya ping yapılacak hedeflerin listesini içeren bir dosya belirtebileceğinizden farklıdır."
  • "Zaman aşımına uğrayana veya yanıt verinceye kadar bir hedefe göndermek yerine, fping bir ping paketi gönderecek ve bir sonraki aşamada yuvarlak vuruşlu bir şekilde ilerleyecektir."
  • "Ping'in aksine, fping komut dosyalarında kullanılmak içindir, bu nedenle çıktısı ayrıştırılması kolay olacak şekilde tasarlanmıştır."

1
Harika çalışıyor, teşekkürler, aradığım şey buydu. Bu komut işi iyi yapıyor: fping -c1 -t500 10.0.0.1 10.0.0.2 10.0.0.3 ... Her şey yarım saniye sürüyor ve tüm ana bilgisayarların sonuçlarını aynı anda alıyorum. Mükemmel alet :-))
MiniQuark

37

İçerdiği bir çözüm arayanlar için anahtarı pingkullanın -i.

ping -i 0.2 www.google.com

Veya, 0.1 kullanmak istiyorsanız, root olarak çalıştırmanız gerekir.

sudo ping -i 0.1 www.google.com

Ekstra yardımcı program indirmenize gerek yok.


4
Benden +1. Bu "ping timeout" googlinginin ilk sonucudur ve tam olarak aradığım şey buydu.
Steven Jeffries,

@StevenJeffries Burada aynı!
Luc

1
Ölü ev sahibi durumunda bu çözüm, ilk yararlı çıktısını yaklaşık 1 saniye sonra basacaktır. @MarcelBurkhard'ın daha önce de belirtildiği gibi bu kesinlikle yanlıştır.
Victor Yarema

1
Bu çözümle ilgili sorun, -i 0.1'in 100ms'den daha uzun bekleymeyeceği, ancak 100ms'den uzun süren pingler için daha uzun süreceği ve böylece zaman aşımını azaltacağı.
Llamageddon

2
Bu cevap yanlıştır - pingbir cevap için ne kadar süre bekleyeceği değişmez - sadece ardışık pingleri daha kısa sürede gönderir ....
Mtl Dev

21

timeoutUbuntu / Debian komutuyla kısa bir zaman aşımı süresi belirleyebilirsiniz :

timeout 0.2 ping -c1 fqdn || { do_work }

İyi cevap! Şimdi yaptım: zaman aşımı 1 ping -c 1 test.com
vrijdenker

1
Zaman aşımı sürümüm yalnızca 1 saniye kabul ediyor. timeout (GNU coreutils) 8.4.
slm

Ben bu çözümü seviyorum, diğer tüm komutlara uygulanabilir
datdinhquoc

@slm, sürümünüzün bir saniyeden daha az desteklememesi garip. Benim için çalışıyor: DURATION is a floating point number with an optional suffix: 's' for seconds (the default),... Benim durumumda man timeoutraporlar GNU coreutils 8.26. BWT, Ubuntu 17.04 kullanıyorum.
Victor Yarema

Gerçekte işinize yarayan tek şey bu, zaman aşımını azaltmak (ana bilgisayar yanıt vermiyor) ... Matematiği yine de yapmanız gerekiyor: zaman aşımı, ping komutunun "-c" * "-i" işaretinden büyük olmalı
Marki,

13

Bu görev için nmap kullanıyor olurdum.

nmap -sP --max-retries=1 --host-timeout=1500ms 10.0.0.1

Bununla ilgili daha fazla ayrıntı için nmap Belgesine bakın .


İyi arama .. Bunu yapmanın "Başar" yolu: D +1
Arenstar

Merhaba, bunu yeni denedim, ancak aşağıdaki hata iletisini aldım: "- 's', 'm', 'h' veya 'd' ekleyerek nitelendirmediğiniz sürece --host-timeout milisaniye cinsinden belirtildi. Değer 1500 milisaniyeden büyük olmalıdır ".
MiniQuark

Sorunun açık olduğunu düşünüyorum, zaman aşımı 1500 ms'den kısa olamaz. Daha çok paralellikle ilgili nmap seçeneklerini aramalıyım bence.
pacey

Bu sadece bir istek göndermiş gibi görünüyor. Sürekli arıza tespiti arıyorum, buraya "ping milisaniye zaman aşımı" ile geldim, nmap ubuntu ping gibi sonsuz ping'ler sunuyor mu?
ThorSummoner

bir saniyeden daha düşük bir şeye zaman aşımı ayarı @ galip-bjelkholm cevap olarak ayrıcalıklı bir kullanıcı kullanarak içerecektir
thrau

4

Tüm ana bilgisayarlarınız fiziksel LAN'daysa arp ping aracına bakmak isteyebilirsiniz. Aynı şeyi yapar ancak 'ping'i yapmak için katman 2 arp paketlerini kullanır. Arızanın ne olduğunu toplamak için arpping ve icmp ping veya tcp ping kombinasyonunu kullanabilirsiniz. Örnek bir tcp yığın kazasıdır, bugünlerde nadir olmasına rağmen, bir makineye tcp yığının çarpıp çarpmadığını, makinenin ping'e yanıt vermeyeceğini, ancak arp'a cevap vereceğini (ana bilgisayardaki farklı bir kod parçası) bulabildiğini görebiliriz. .

Bir kilitleme, tcpping ve icmp ping kombinasyonu kullanarak, makinedeki servisin çökmesini, tcp yığınının çökmesini veya makinenin tamamen kilitlenip kilitlenmediğini öğrenebilirsiniz. Ethernet anahtarlarını yönetmişseniz, makinenin gerçekten açıldığını veya fiziksel olarak çıkarıldığını ortaya çıkararak fiziksel bağlantı verilerini alabilirsiniz. Makinelerin (kamuya açık odalardaki müşterilerin) kapatılacağı bir durum vardı, bu verileri topladı ve makineleri paketlemek için lan paketlerine gönderdik. :-)

Yaptığınız çözümler ne olursa olsun, eğer ağınız meşgulse, bir tür qo uygulaması yapmayı düşünün, böylece izleme paketleriniz ağda önceliğe sahip olur, ağ tıkanıklığı nedeniyle ölçüm paketlerini kaybetmek yanlış alarm verebilir. Paketleri izlemek için qos kullanıyorsanız, ağ kullanımı hakkında veri toplamayı düşünmeniz gerekir.

Böylece, izleme çözümünüzü istediğiniz kadar karmaşık veya kolay hale getirebilirsiniz. En basit izleme sisteminin bile doğru yönde bir adım olduğunu görüyoruz, en azından bazı yöneticiler makinelere göz kulak oluyor :-).

iyi şanslar!


3

@ jordon-bedwell harika bir öneriniz var.

@ laszlo-valko https://stackoverflow.com/questions/20359487/why-does-ping-not-timeout-in-linux , ping zaman aşımlarının yalnızca ip adresi belirlendikten sonra başladığını açıklar. Bir dns kullanıyorsanız ve iş istasyonunuz çevrimdışıysa, ping ip adresini belirleyemez ve bu nedenle false döndürmeden önce yaklaşık 20 + sn bekler gibi görünür.

Linux 'timeout' aracını kullanmak, bir etki alanı adıyla ping çalıştırırken daha fazla kontrol sağlar.

Teşekkürler beyler


2

Hem Windows hem de Debian'da -w anahtarını kullanın .

Belirtilen saniye miktarından daha kısa sürede yanıt vereceğini varsayarak, makinenin hiç yanıt verdiğini kontrol etmenin hızlı bir yoludur.

ping -w 1 192.168.80.105

PING 192.168.80.105 (192.168.80.105) 56(84) bytes of data.

--- 192.168.80.105 ping statistics ---
2 packets transmitted, 0 received, 100% packet loss, time 999ms

1

Alt ağınızı (veya bir bölümünü) güvenlik alarmlarını tetiklemeden tarayabilir ve biraz fazla veri sakıncası yoksa, Angry IP Tarayıcı hızlı, ücretsizdir, duruma göre sıralamanıza izin verir ve daha ayrıntılı bilgi sağlayabilir .


0

Neden her ana bilgisayara paralel olarak, geçici bir dosyaya çıkışı olan ping'i arka planda başlatmıyorsunuz? Sonra bir saniye uyuyun, hala çalışmakta olan ping işlemlerini kesin ve çıktıları toplamak için dosyaları okuyun.


1
İşe yarar sanırım, ama daha basit bir çözüm arıyordum. Yine de teşekkürler.
MiniQuark

Bu yöntem ölçeklenmiyor.
Synetech

0

Zaman aşımı, paketin ne kadar uzun süre gönderilebileceğini belirten bir tamsayı değeridir. 1'in altındaki değerler anlamsız. 1 değeri, yalnızca acil komşulara ping attığınızı gösterir.

İşleri hızlandırmanın tek yolu arka plan kontrolü yapmak ve sonuçları toplamaktır. Nagios gibi araçlar böyle yapar.


1
Üzgünüm, ama bunun doğru olduğunu sanmıyorum. Man sayfası oldukça açıktır -W "Bir yanıt için saniye beklemek için zaman"; boyutsuz değildir ve ping 1'in altındaki değerleri onurlandırmasa da (dolayısıyla soru) alt-ikinci zaman aşımları anlamsız değildir. Beni affedersen, -t ile -W ile karıştırırsın, ikincisi, tanımladığın gibi davranan IP TTL (atlama sayısı) alanını ayarlar, ve 1'in altındaki değerler gerçekten anlamsızdır.
MadHatter

-W, ping işleminin bir yanıt beklemesinin zamanıdır ve sıçrama sayısının yüksek olması durumunda normalde olduğu gibi, atlama sayısının çok altında ayarlamak mantıklı gelebilir. Üç saniye içinde, genellikle yeniden deneme koşullarına girersiniz. Bazı aletler beklemeler için daha ince taneli bir zamanlayıcı kullanılmasına izin verebilir, ancak çoğu ping kullanımı için saniyeler makul bir ünitedir.
BillThor,

0

Böyle bir şey deneyebilirsin. Fakat kaçması 15 dakika sürer.

a=258
while [ $a -ge 1 ]
do
    echo "10.0.0.$a"
    sudo ping -i 0.1 -c 1 "10.0.0.$a">>/home/$USER/output.log
   a=`expr $a - 1`
done
cat /home/$USER/output.log|grep -i "icmp_req=1"
cat /dev/null>/home/$USER/output.log

nmapİş için doğru araç gibi görünüyor .
kasperd


-1

ping [-t timeout] ve [-W waittime] seçeneklerine sahiptir, böylece şunları yapabilirsiniz:

ping -c 1 -t 1 -W 1 google.com
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.