Ping จาก windows 7 ไม่ได้รับคำตอบ แต่ตั้ง errorlevel เป็น 0


10

จากเครื่อง Windows 7 ฉันจะ ping ที่อยู่ 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 ด้วยเหตุผลบางอย่าง ping ตั้งระดับ0ข้อผิดพลาดเป็น

คำตอบ:


8

ฉันยังประสบปัญหาและแก้ไขด้วยปุ่ม " -w 2000 " Ping เสริมด้วยคีย์ " -w " และจำนวนมิลลิวินาทีส่งคืน1เมื่อโฮสต์ในเครือข่ายย่อยท้องถิ่นไม่สามารถเข้าถึงได้ AFAIK จำนวนมิลลิวินาทีต้องน้อยกว่าการหมดเวลาหลังจากระบบย่อยเครือข่ายของ Windows ส่งคืน "ไม่สามารถเข้าถึงโฮสต์ปลายทาง"

บนพีซีของฉัน (Windows 7):
C:> ping -w 3000 192.168.10.22

ส่ง Ping ไปยัง 192.168.10.22 พร้อมข้อมูล 32 ไบต์:
ตอบกลับจาก 192.168.10.2: ไม่สามารถเข้าถึงโฮสต์ปลายทางได้
ตอบกลับจาก 192.168.10.2: ไม่สามารถเข้าถึงโฮสต์ปลายทางได้
ตอบกลับจาก 192.168.10.2: ไม่สามารถเข้าถึงโฮสต์ปลายทางได้
ตอบกลับจาก 192.168.10.2: ไม่สามารถเข้าถึงโฮสต์ปลายทางได้

Ping Ping สำหรับ 192.168.10.22:
Packets: Sent = 4, Received = 4, Lost = 0 ( การสูญเสีย 0% ),

C:> echo% errorlevel%
0

แต่

C:> ping -w 2999 192.168.10.22

ส่ง Ping 192.168.10.22 พร้อมข้อมูล 32 ไบต์:
คำขอหมดเวลา
คำขอหมดเวลา
คำขอหมดเวลา
คำขอหมดเวลา

Ping Ping สำหรับ 192.168.10.22:
Packets: Sent = 4, ได้รับ = 0, Lost = 4 ( สูญเสีย 100% ),

C:> echo% errorlevel%
1


ทุกคนสามารถยืนยันว่านี่ถูกต้องสำหรับทุกกรณีการใช้?
user1853181

2
ฉันทดสอบการตั้งค่า-wสวิตช์เป็น 2999 กับ IP ที่ถูกต้องและไม่ถูกต้องเพิ่ม-n 1สวิตช์เช่นกัน ดูเหมือนว่าจะทำงาน
fyrye

ใช่ ... นี่เป็นการตั้งค่าระดับความผิดพลาดหากไม่มีโฮสต์ที่ที่อยู่ที่ระบุ ... ขอบคุณ
ZEE

7

นี่เป็นเพราะปลายทางอยู่ในเครือข่ายย่อยท้องถิ่นของคุณ หากปลายทางอยู่นอกเครือข่ายย่อยท้องถิ่นของคุณRequest timed out.จะเห็นการคาดการณ์ Reply from x.x.x.x: Destination host unreachable.แต่ปลายทางไม่ได้มีอยู่ภายในเครือข่ายย่อยในท้องถิ่นของคุณจะรายงาน เมื่อโพสต์ของวังวนนี้อธิบายทุกอย่างขึ้นอยู่กับว่ามันเป็นฮ็อปแรกที่หมดเวลาหรือไม่และการส่งซับเน็ตท้องถิ่นของคุณเป็นเพียงการกระโดดครั้งเดียว เห็นได้ชัดว่าเป็นเพราะการออกแบบที่ errorlevel ถูกตั้งค่าเป็น0เมื่อได้รับคำตอบใด ๆและhost unreachableนับเป็นคำตอบ


วิธีการแก้ปัญหา

แยกpingเอาต์พุตด้วยfindstr

ที่มา: http://forums.techguy.org/7318331-post3.html

ต่อไปนี้จะ ping หนึ่งครั้ง ( ping -n 1) %1เป็นพารามิเตอร์แรกส่งผ่านไปยังแฟ้มชุด ตัวแปร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

ยูทิลิตี้แยกต่างหาก

มียูทิลิตี้ที่น่าสนใจเรียกว่าเป็นยังมีชีวิตอยู่ ฉันไม่ได้ลองและมันเปิดตัวในปี 2002 ดังนั้นมันอาจไม่ทำงานใน Windows 7 อย่างไรก็ตามถ้ามันใช้งานได้มันจะตั้ง errorlevel เป็น 2 เมื่อโฮสต์ปลายทางไม่สามารถเข้าถึงได้ แม้ว่าฉันจะไม่แนะนำสิ่งนี้จริงๆ


+1 สำหรับaliveใช้เมื่อหลายปีก่อนด้วยเหตุผลอย่างนี้
ไบรอัน

หากคำตอบคือ "คำขอ Ping ไม่พบ host madeup04 โปรดตรวจสอบชื่อและลองอีกครั้ง" สิ่งนี้ใช้งานไม่ได้เพราะกำลังมองหา "host unreachable" ดังนั้นผลลัพธ์ของคุณคือ "madeup04 กำลังตอบกลับ" ซึ่งผิด
James Jenkins

1
@JamesJenkins ฉันได้ตั้งสมมุติฐานว่าในความพยายาม ping นั้นขัดแย้งกับที่อยู่ IP ถึงแม้ว่ามันจะเป็นการเปลี่ยนแปลงเล็กน้อย (เพิ่ม/Cสตริงการค้นหาอื่น) คุ้มค่ากับการลงคะแนนน้อยมาก ตามที่ฉันได้แก้ไขคำตอบดังนั้นขอบคุณสำหรับการชี้ให้เห็นว่า
Bob

อืม ... นั่นมันงี่เง่า ... ใช้เวลาครึ่งวันในการพยายามคิดออกว่าทำไมระบบของฉันจึงรายงานระบบย่อยว่าเป็นออนไลน์ - ในขณะที่มันไม่ชัดเจน ...
Matt Clark

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.