Windows 7'den ping yanıt alamıyor ancak hata seviyesini 0 olarak ayarlıyor


10

Bir Windows 7 makinesinden, kapalı bir makinenin IP adresine ping atıyorum.

C:\>ping 192.168.1.222
Pinging 192.168.1.222 with 32 bytes of data:
Reply from 192.168.1.222: Destination host unreachable.
Reply from 192.168.1.222: Destination host unreachable. 
Reply from 192.168.1.222: Destination host unreachable.

Ping statistics for 192.168.1.222:
    Packets: Sent = 3, Received = 3, Lost = 0 (0% loss)

Yanıt olmasa bile, hata seviyesi olarak ayarlanır 0.

Yapmaya çalıştığım şey, uzak bir makinenin ping komutuna yanıt verip vermediğini bulmak. Testlerimden biri makineyi kapatıp ping atmak. Bazı nedenlerden dolayı ping hata düzeyini belirler 0.

Yanıtlar:


8

Ayrıca sorunla karşı karşıya kaldım ve " -w 2000 " anahtarıyla çözüldü . Yerel alt ağdaki ana bilgisayara erişilemiyorsa, " -w " anahtarıyla desteklenen mil ve milisaniye sayısı 1 değerini döndürür . AFAIK, Windows'un ağ alt sistemi "Hedef ana bilgisayara erişilemiyor" değerini döndürdükten sonra milisaniye sayısının zaman aşımından daha az olması gerekir.

Bilgisayarımda (Windows 7):
C:> ping -w 3000 192.168.10.22

192.168.10.22'ye 32 bayt veri ile ping gönderme: 192.168.10.2'den
yanıt: Hedef ana bilgisayara erişilemiyor.
192.168.10.2 yanıt: Hedef ana bilgisayara ulaşılamıyor.
192.168.10.2 yanıt: Hedef ana bilgisayara ulaşılamıyor.
192.168.10.2 yanıt: Hedef ana bilgisayara ulaşılamıyor.

192.168.10.22 için ping istatistikleri:
Paketler: Gönderilen = 4, Alındı ​​= 4, Kayıp = 0 ( % 0 kayıp ),

C:> echo% hata seviyesi%
0

fakat

C:> ping -w 2999 192.168.10.22

32 bayt veri ile 192.168.10.22 ping işlemi:
İstek zaman aşımına uğradı.
İstek zaman aşımına uğradı.
İstek zaman aşımına uğradı.
İstek zaman aşımına uğradı.

192.168.10.22 için ping istatistikleri:
Paketler: Gönderildi = 4, Alındı ​​= 0, Kayıp = 4 ( % 100 kayıp ),

C:> echo% hata seviyesi%
1


Herkes bunun tüm kullanım durumları için geçerli olduğunu doğrulayabilir mi?
user1853181

2
-wAnahtarı ekleyerek geçerli ve geçersiz bir IP'ye karşı 2999'a ayarlamayı test ettim -n 1. İşe yarıyor gibi görünüyor.
Ocak'ta fyrye

evet ... belirtilen adreste hiçbir ana bilgisayar yoksa hata düzeyini ayarlar ... teşekkürler
ZEE

7

Bunun nedeni, hedefin yerel alt ağınızda olmasıdır. Hedef yerel alt ağınızın dışındaysa, beklenen Request timed out.görülür. Ancak, yerel alt ağınızdaki var olmayan hedefler bile raporlanır Reply from x.x.x.x: Destination host unreachable.. Gibi bu girdap sonrası ve yerel alt ağ ping sadece tek hop - bunu açıklıyor, hepsi zaman aşımına ilk hop olmadığına bağlıdır. Görünüşe göre bu tasarım gereği var ErrorLevel ayarlandığını 0zaman herhangi bir yanıt alınmaması ve bir host unreachablecevap olarak sayar.


Geçici Çözümler

pingÇıktı ile ayrıştırmafindstr

Kaynak: http://forums.techguy.org/7318331-post3.html

Aşağıdakiler bir kez ping işlemi yapar ( ping -n 1). %1Toplu iş dosyasına geçirilen ilk param olduğunu. Değişken attrib, hedefin cevap verip vermemesine bağlı olarak ayarlanır.

echo Scanning %1
set attrib=responding
ping -n 1 %1|Findstr /I /C:"timed out" /C:"host unreachable" /C:"could not find host"
if %errorlevel%==0 set attrib=nonresponsive

Ayrı yardımcı program

Canlı denen ilginç bir yardımcı program var . Ben denemedim, ve 2002 yılında piyasaya sürüldü, bu yüzden Windows 7'de bile çalışmayabilir. Gerçekten, bu olsa tavsiye etmem.


aliveBu nedenle + 1 yıl önce de kullandı.
Bryan

Yanıt "Ping isteği ana bilgisayar madeup04'ü bulamadı. Lütfen adı kontrol edin ve tekrar deneyin" bu işe yaramaz, çünkü "ana bilgisayara erişilemiyor" araması yapar, bu nedenle sonucunuz "madeup04 yanıt veriyor" dır bu da yanlıştır.
James Jenkins

1
@JamesJenkins Soruda olduğu gibi ping girişiminin bir IP adresine karşı olduğu varsayımını yaptım. O zaman bile, bu önemsiz bir değişiklik (başka bir /Carama dizesi ekleyin ). Bir aşağı oy değer. Olduğu gibi, cevabı değiştirdim, bu yüzden belirttiğiniz için teşekkürler.
Bob

Ugh ... bu çok aptalca ... Günümün yarısını, sistemimin neden bir alt sistemi çevrimiçi olarak raporladığını anlamaya çalışarak
Matt Clark

2

Bu benim için Windows 7'de çalışıyor:

@echo off
setlocal enableextensions enabledelayedexpansion

for /f %%i in (PCS.TXT) do (
   SET bHOSTUP=0
   ping -n 2 %%i |find "TTL=" && SET bHOSTUP=1
   IF !bHOSTUP! equ 1 (
      CALL :HOSTUP %%i
   ) else (
      CALL :HOSTDOWN %%i 
   )
)

:HOSTUP
echo Host UP %1
GOTO EOF

:HOSTDOWN
echo Host DOWN %1
GOTO EOF

:EOF
exit /B
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.