Ping dari windows 7 tidak mendapat balasan tetapi menetapkan tingkat kesalahan ke 0

10

Dari mesin Windows 7, saya ping alamat IP mesin yang dimatikan.

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)

Meskipun tidak ada jawaban, tingkat kesalahan diatur ke 0.

Apa yang saya coba lakukan, adalah mencari tahu apakah mesin remote membalas ping. Salah satu tes saya adalah mematikan mesin dan melakukan ping. Untuk beberapa alasan, ping menetapkan tingkat kesalahan menjadi 0.

Doron
sumber

Jawaban:

8

Saya juga menghadapi masalah dan diselesaikan dengan kunci " -w 2000 ". Ping dilengkapi dengan kunci " -w " dan jumlah milidetik mengembalikan 1 ketika host di subnet lokal tidak dapat dijangkau. AFAIK, jumlah milidetik harus lebih kecil dari batas waktu setelah subsistem jaringan Windows mengembalikan "Host tujuan tidak terjangkau".

Di PC saya (Windows 7):
C:> ping -w 3000 192.168.10.22

Ping 192.168.10.22 dengan 32 byte data:
Balas dari 192.168.10.2: Host tujuan tidak dapat dijangkau.
Balas dari 192.168.10.2: Host tujuan tidak dapat dijangkau.
Balas dari 192.168.10.2: Host tujuan tidak dapat dijangkau.
Balas dari 192.168.10.2: Host tujuan tidak dapat dijangkau.

Statistik Ping untuk 192.168.10.22:
Paket: Terkirim = 4, Diterima = 4, Hilang = 0 ( kerugian 0% ),

C:> echo% errorlevel%
0

tapi

C:> ping -w 2999 192.168.10.22

Ping 192.168.10.22 dengan 32 byte data:
Batas waktu permintaan.
Permintaan habis.
Permintaan habis.
Permintaan habis.

Statistik Ping untuk 192.168.10.22:
Paket: Terkirim = 4, Diterima = 0, Hilang = 4 ( kerugian 100% ),

C:> echo% errorlevel%
1

pengguna354000
sumber
Adakah yang bisa mengkonfirmasi bahwa ini berlaku untuk semua kasus penggunaan?
user1853181
2
Saya menguji pengaturan -wsaklar ke 2999 terhadap IP yang valid dan tidak valid menambahkan -n 1saklar juga. Sepertinya berhasil.
fyrye
ya ... ini menetapkan tingkat kesalahan jika tidak ada host di alamat yang ditentukan ... terima kasih
ZEE
7

Ini karena tujuannya ada di subnet lokal Anda. Jika tujuan berada di luar subnet lokal Anda, yang diharapkan Request timed out.terlihat. Namun, bahkan destinasi yang tidak ada dalam subnet lokal Anda akan melaporkan Reply from x.x.x.x: Destination host unreachable.. Seperti yang dijelaskan oleh pusaran air ini, semua tergantung pada apakah ini hop pertama yang habis - dan ping subnet lokal Anda hanya satu hop. Rupanya, dengan desainlah tingkat kesalahan diatur ke 0saat setiap balasan diterima, dan host unreachabledihitung sebagai balasan.


Penanganan masalah

Parsing pingoutput denganfindstr

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

Berikut ini akan melakukan ping sekali ( ping -n 1). Ini %1adalah param pertama yang diteruskan ke file batch. Variabel attribdiatur tergantung pada apakah tujuan membalas atau tidak.

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

Utilitas terpisah

Ada utilitas menarik yang disebut hidup . Saya belum mencobanya, dan dirilis pada tahun 2002, jadi mungkin bahkan tidak bekerja di Windows 7. Namun, jika berhasil, itu akan mengatur tingkat kesalahan menjadi 2 ketika host tujuan tidak dapat dijangkau. Saya tidak akan merekomendasikan ini.

Bob
sumber
+1 untuk alive, digunakan bertahun-tahun yang lalu juga, karena alasan ini.
Bryan
Jika jawabannya adalah "Permintaan ping tidak dapat menemukan host dibuatup04. Silakan periksa nama dan coba lagi" ini tidak berhasil, karena sedang mencari "host tidak dapat dijangkau", jadi hasil Anda adalah "madeup04 merespons" yang salah.
James Jenkins
1
@ JamesJenkins Saya memang membuat asumsi bahwa, seperti dalam pertanyaan, upaya ping bertentangan dengan alamat IP. Bahkan kemudian, itu adalah perubahan sepele (tambahkan /Cstring pencarian lain ). Hampir tidak layak untuk downvote. Karena itu, saya telah mengubah jawabannya, jadi terima kasih telah menunjukkannya.
Bob
Ugh ... yah itu bodoh ... Menghabiskan setengah hari saya untuk mencari tahu mengapa sistem saya melaporkan subsistem sebagai online - sementara itu jelas tidak ...
Matt Clark
2

Ini berfungsi untuk saya di Windows 7:

@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
Andrew S
sumber