Пакетный файл скрипта получает шлюз по умолчанию и IP-адрес ping - PullRequest
0 голосов
/ 30 августа 2018

Я пытаюсь получить шлюз по умолчанию и автоматически пинговать следующий IP-адрес 192.168.1. (1-254), затем сохраняю активный или неактивный IP-адрес в текстовый файл.

Из этого кода он будет сканировать шлюз по умолчанию, и пользователь должен будет вручную ввести IP-адрес.

Пример:

enter image description here

То, что я пытаюсь сделать, это сканировать шлюз по умолчанию и преобразовать его в переменную, чтобы он мог быть +1 / сканировать шлюз по умолчанию и автоматически запустить цикл +1

Можно ли получить что-то подобное, не вставляя IP-адрес?

(шлюз по умолчанию может отличаться (например, 10.1.180.0) при тестировании в другой сети, поэтому старайтесь не устанавливать его как статический и запустить цикл)

Detected Default Gateway :192.168.1.0 

trying to ping 192.168.1.1

trying to ping 192.168.1.2

trying to ping 192.168.1.3

SET /a defaultipgateway=%count%+1  <-will change the result into 0.1 and stop.

Полный код:

@echo off

for /f "tokens=2,3 delims={,}" %%a in ('"WMIC NICConfig where IPEnabled="True" get DefaultIPGateway /value | find "I" "') do echo Default IP Gateway : %%~a 

SET count=0
SET /p subnet=Please enter IP address range (for example, 192.168.0) :

:start
SET /a count=%count%+1

ECHO.Trying %subnet%.%count% & ECHO.

ping -n 1 -w 1000 %subnet%.%count% >nul  
IF %errorlevel%==0 echo %subnet%.%count% ACTIVE >> ACTIVE.txt  
IF %errorlevel%==1 echo %subnet%.%count% DOWN >> DOWN.txt

IF %count%==254 goto :eof

GOTO start

1 Ответ

0 голосов
/ 30 августа 2018

Как насчет этого, чтобы автоматически получить шлюз, а затем пропинговать диапазон от 1 до 254? Видя, что у вас есть и шлюзы IPv4 и IPv6, мы делаем это, используя wmic:

@echo off
type nul >up.txt
type nul >down.txt
for /f "tokens=2,3 delims={,}" %%a in ('"wmic nicconfig where IPEnabled="True" get DefaultIPGateway /value | find "I" "') do (
  for /f "tokens=1-3 delims=^." %%i in ("%%~a") do (
    for /l %%l in (1,1,254) do (
      ping -4 -w 1000 -n 1 %%i.%%j.%%k.%%l | findstr "bytes=32"
     if errorlevel 1 (echo %%i.%%j.%%k.%%l DOWN >> DOWN.txt) else (echo %%i.%%j.%%k.%%l ACTIVE >> ACTIVE.txt)
  )
 )
)

Я использую findstr в команде ping для поиска bytes=32, так как это единственный индикатор, который действительно показывает, что он получил ответ. Причина этого в том, что если вы получаете Destination host unreachable, он по-прежнему дает потерю пакета 0, а байты 32 существуют только в реальном ответе от хоста.

Совет !! В зависимости от качества вашей сети и расстояния между компьютерами в локальной сети и в зависимости от того, насколько заняты ваши маршрутизаторы и коммутаторы, я бы предложил вместо этого увеличить значение до -w 1500. В настоящее время, если устройство работает и для ответа требуется более 1000 мс, оно будет отправлено в файл DOWN.txt. Причина в том, что ICMP является протоколом диагностики и не получает приоритет. Устройство может быть на расстоянии одного шага, но если оно очень занято обработкой приоритетного трафика, оно отбросит ваши ICMP-пакеты или вызовет огромные задержки в ответе.

...