Windows 7의 Ping은 응답이 없지만 errorlevel을 0으로 설정합니다.


10

Windows 7 컴퓨터에서 전원이 꺼진 컴퓨터의 IP 주소를 핑합니다.

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)

응답이 없지만 errorlevel은로 설정됩니다 0.

내가하려는 것은 원격 컴퓨터가 Ping에 응답하는지 확인하는 것입니다. 내 테스트 중 하나는 기계를 끄고 핑하는 것입니다. 어떤 이유로 ping은 errorlevel을로 설정합니다 0.

답변:


8

또한 문제에 직면하여 " -w 2000 " 키로 해결되었습니다 . 로컬 서브넷의 호스트에 연결할 수없는 경우 키 " -w "와 밀리 초 수로 보충 된 Ping 은 1을 반환합니다 . AFAIK, 밀리 초 수는 Windows 네트워크 하위 시스템이 "대상 호스트에 도달 할 수 없음"을 반환 한 후 시간 초과보다 작아야합니다.

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

32 바이트의 데이터로 192.168.10.22 핑 :
192.168.10.2에서 응답 : 대상 호스트에 도달 할 수 없습니다.
192.168.10.2의 회신 : 대상 호스트에 연결할 수 없습니다.
192.168.10.2의 회신 : 대상 호스트에 연결할 수 없습니다.
192.168.10.2의 회신 : 대상 호스트에 연결할 수 없습니다.

192.168.10.22에 대한 Ping 통계 :
패킷 : Sent = 4, Received = 4, Lost = 0 ( 0 % loss ),

C :> 에코 % errorlevel %
0

그러나

C :> 핑 -w 2999 192.168.10.22

32 바이트의 데이터로 192.168.10.22 핑 :
요청 시간이 초과되었습니다.
요청 시간이 초과되었습니다.
요청 시간이 초과되었습니다.
요청 시간이 초과되었습니다.

192.168.10.22에 대한 Ping 통계 :
패킷 : Sent = 4, Received = 0, Lost = 4 ( 100 % loss ),

C :> 에코 % 오류 수준
1


누구나 이것이 모든 사용 사례에 유효하다는 것을 확인할 수 있습니까?
user1853181

2
-w스위치를 추가하는 유효하고 유효하지 않은 IP에 대해 스위치를 2999로 설정하는 것을 테스트했습니다 -n 1. 작동하는 것 같습니다.
fyrye

예 ... 지정된 주소에 호스트가없는 경우 오류 수준을 설정합니다 ... thanks
ZEE

7

대상이 로컬 서브넷에 있기 때문입니다. 대상이 로컬 서브넷 외부에 있으면 예상대로 Request timed out.표시됩니다. 그러나 로컬 서브넷 내에 존재하지 않는 대상이라도보고 Reply from x.x.x.x: Destination host unreachable.합니다. 이 월풀 게시물에서 설명 하듯 ,이 시간은 첫 번째 홉이 시간 초과되고 로컬 서브넷을 ping하는 것이 단일 홉인지에 따라 다릅니다. 분명히, 그것은 디자인의 오류 수준이 설정되어 있는지 0어떤 응답이 수신 및 host unreachable응답으로 계산됩니다.


해결 방법

ping출력 파싱findstr

출처 : http://forums.techguy.org/7318331-post3.html

다음은 한 번 핑 ( ping -n 1)합니다. 는 %1배치 파일에 전달 된 첫 번째 PARAM입니다. attrib대상이 응답하는지 여부에 따라 변수 가 설정됩니다.

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

별도의 유틸리티

alive 라는 흥미로운 유틸리티가 있습니다 . 나는 그것을 시도하지 않았으며 2002 년에 릴리스되었으므로 Windows 7에서도 작동하지 않을 수 있습니다. 그러나 작동하면 대상 호스트에 도달 할 수 없을 때 오류 수준을 2로 설정합니다. 그래도 나는 이것을 권장하지 않습니다.


+1은 alive여러 해 전에도 사용 된 이유입니다.
Bryan

응답이 "Ping 요청에서 호스트 madeup04를 찾을 수 없습니다. 이름을 확인한 후 다시 시도하십시오."인 경우 "호스트에 도달 할 수 없음"을 찾고 있으므로 결과가 "madeup04가 응답하고 있습니다"가 올바르지 않습니다.
James Jenkins

1
@JamesJenkins 나는 질문에서와 같이 핑 시도가 IP 주소에 대한 것이라고 가정했습니다. 그럼에도 불구하고 사소한 변경입니다 (다른 /C검색 문자열 추가 ). 공감 가치가 거의 없습니다. 그대로 답변을 수정 했으므로 지적 해 주셔서 감사합니다.

윽 ...뿐만 아니라 온라인 바보 ... 내 시스템은 서브 시스템을보고 이유를 알아 내려고 반 내 하루 보냈다 그 - 그것은 분명 아니었지만 ...
매트 클라크

2

이것은 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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.