
IP 범위 172.18.xx ~ 172.25.xx 내의 네트워크에서 여러 시스템을 스캔하고 각각이 활성 상태인지 여부를 확인한 다음 결과를 파일에 덤프해야 합니다. 다음은 스크립트입니다.
@echo off
for /L %%x in (18,1,25) do (
for /L %%y in (1,1,254) do (
for /L %%z in (1,1,254) do (
ping -n 1 172.%%x.%%y.%%z | find "Reply" > NUL
IF NOT ERRORLEVEL 1 (set state=UP) ELSE (set state=DOWN)
echo 172.%%x.%%y.%%z is %state% >> state.txt
)))
그러나 결과적으로는 일부 IP 주소가 사용되지 않음에도 불구하고 모든 시스템이 'UP' 상태라는 결론이 나옵니다.
스크립트에 문제가 있나요?
답변1
스크립트의 문제는 배치 스크립트에 있어서 매우 이상한 것이었습니다. IF 또는 FOR 내에서 업데이트할 환경 변수를 얻으려면 setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
및 를 사용해야 합니다 !var!
. 궁금하신 분은 부조리한 내용(!var!과 함께 setlocal 행을 포함하지 않으면 어떤 일이 발생하는지)에 대해 자세히 설명합니다 set /?
.
setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
for /L %%x in (18,1,25) do (
for /L %%y in (1,1,254) do (
for /L %%z in (1,1,254) do (
ping -n 1 172.%%x.%%y.%%z | find "Reply" > NUL
IF NOT ERRORLEVEL 1 (set state=UP) ELSE (set state=DOWN)
echo 172.%%x.%%y.%%z is !state! >> state.txt
)))
그리고 당신이 올라간 것만 원한다면. 이 시도
setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
for /L %%x in (18,1,25) do (
for /L %%y in (1,1,254) do (
for /L %%z in (1,1,254) do (
ping -n 1 -w 1000 172.%%x.%%y.%%z | find "Reply" > NUL
IF NOT ERRORLEVEL 1 (
set state=UP
echo 172.%%x.%%y.%%z is !state! >> state.txt
) ELSE (
set state=DOWN
)
)))
답변2
나는 제안한다향신료 공장(귀하의 질문을 본 후 이것을 제안하고 있습니다.https://networkengineering.stackexchange.com/questions/6993/tool-or-script-for-collecting-network-inventory). 필요한 모든 세부 정보는 spiceworks 인벤토리 도구를 통해 사용할 수 있습니다. 이는 Windows AD에 가장 적합하지만 어느 방식으로도 수행할 수 있습니다.
답변3
얼마나 많은 시스템을 확인해야 하는지 모르겠습니다.. 올바른 솔루션을 찾았습니다.여기.. 이렇게 하는 것이 쉽다면 이 답변을 수락하세요...
For /f %%i in (testservers.txt) do ping -n 1 %%i >>state.txt
**testservers.txt에 모든 IP를 포함합니다.
답변4
나는 다음과 같은 도구를 사용할 것이다.화난 IP 스캐너이 일을 하기 위해. 똑같은 일을 할 수 있는 다른 도구가 너무 많으면 스크립팅은 무의미해 보입니다.