Ping từ windows 7 không nhận được trả lời nhưng đặt errorlevel thành 0


10

Từ máy Windows 7, tôi ping địa chỉ IP của máy đã tắt.

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)

Mặc dù không có trả lời, errorlevel được đặt thành 0.

Những gì tôi đang cố gắng làm, là tìm hiểu xem một máy từ xa đang trả lời ping. Một trong những thử nghiệm của tôi là tắt máy và ping nó. Vì một số lý do, ping đặt errorlevel thành 0.

Câu trả lời:


8

Tôi cũng phải đối mặt với vấn đề và nó đã được giải quyết bằng khóa " -w 2000 ". Ping được bổ sung khóa " -w " và số mili giây trả về 1 khi máy chủ trong mạng con cục bộ không thể truy cập được. AFAIK, số mili giây phải nhỏ hơn thời gian chờ sau khi hệ thống con mạng của Windows trả về "Máy chủ đích không thể truy cập được".

Trên PC của tôi (Windows 7):
C:> ping -w 3000 192.168.10.22

Pinging 192.168.10.22 với 32 byte dữ liệu:
Trả lời từ 192.168.10.2: Máy chủ đích không thể truy cập được.
Trả lời từ 192.168.10.2: Máy chủ đích không thể truy cập được.
Trả lời từ 192.168.10.2: Máy chủ đích không thể truy cập được.
Trả lời từ 192.168.10.2: Máy chủ đích không thể truy cập được.

Thống kê Ping cho 192.168.10.22:
Gói: Đã gửi = 4, Đã nhận = 4, Mất = 0 ( mất 0% ),

C:> echo% errorlevel%
0

nhưng

C:> ping -w 2999 192.168.10.22

Pinging 192.168.10.22 với 32 byte dữ liệu:
Yêu cầu đã hết thời gian.
Yêu cầu đã hết thời gian.
Yêu cầu đã hết thời gian.
Yêu cầu đã hết thời gian.

Thống kê Ping cho 192.168.10.22:
Gói: Đã gửi = 4, Đã nhận = 0, Mất = 4 ( mất 100% ),

C:> echo% errorlevel%
1


Bất cứ ai cũng có thể xác nhận rằng điều này là hợp lệ cho tất cả các trường hợp sử dụng?
dùng1853181

2
Tôi đã thử nghiệm cài đặt công -wtắc thành 2999 dựa trên IP hợp lệ và không hợp lệ khi thêm công -n 1tắc. Nó dường như làm việc.
fyrye

có ... điều này đặt errorlevel nếu không có máy chủ tại địa chỉ được chỉ định ... cảm ơn
ZEE

7

Điều này là do đích đến trên mạng con cục bộ của bạn. Nếu đích nằm ngoài mạng con cục bộ của bạn, dự kiến ​​sẽ Request timed out.được nhìn thấy. Tuy nhiên, ngay cả các điểm đến không tồn tại trong mạng con cục bộ của bạn sẽ báo cáo Reply from x.x.x.x: Destination host unreachable.. Như bài đăng xoáy nước này giải thích nó, tất cả phụ thuộc vào việc liệu bước nhảy đầu tiên của nó đã hết thời gian hay chưa và việc bật mạng con cục bộ của bạn chỉ là một bước nhảy duy nhất. Rõ ràng, theo thiết kế , errorlevel được đặt thành 0khi nhận được bất kỳ phản hồi nàohost unreachableđược tính là một phản hồi.


Cách giải quyết

Phân tích cú pháp pingđầu ra vớifindstr

Nguồn: http://forums.techguy.org/7318331-post3.html

Sau đây sẽ ping nó một lần ( ping -n 1). Đây %1là thông số đầu tiên được truyền vào tệp bó. Biến attribđược đặt tùy thuộc vào việc đích trả lời hay không.

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

Tiện ích riêng biệt

Có một tiện ích thú vị được gọi là còn sống . Tôi đã không thử nó và nó được phát hành vào năm 2002, vì vậy nó thậm chí có thể không hoạt động trong Windows 7. Tuy nhiên, nếu nó hoạt động, nó sẽ đặt errorlevel thành 2 khi không thể truy cập máy chủ đích. Tôi thực sự sẽ không đề nghị điều này, mặc dù.


+1 cho alive, được sử dụng mà nhiều năm trước cũng vậy, vì lý do này rất.
Bryan

Nếu phản hồi là "Yêu cầu Ping không thể tìm thấy máy chủ được tạo ra.
James Jenkins

1
@JamesJenkins Tôi đã đưa ra giả định rằng, như trong câu hỏi, nỗ lực ping là chống lại địa chỉ IP. Thậm chí sau đó, đó là một thay đổi nhỏ (thêm một /Cchuỗi tìm kiếm khác ). Hầu như không đáng để downvote. Vì nó là, tôi đã sửa đổi câu trả lời, vì vậy cảm ơn bạn đã chỉ ra điều đó.
Bob

Ugh ... thật là ngu ngốc ... Đã dành nửa ngày để tìm hiểu lý do tại sao hệ thống của tôi báo cáo một hệ thống con là trực tuyến - trong khi rõ ràng là không ...
Matt Clark

2

Điều này hoạt động với tôi trên 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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.