Узел назначения недоступен, не приводит к уровню ошибки 1 - PullRequest
0 голосов
/ 18 марта 2019

Итак, на работе у нас есть несколько компьютеров, на которые мы должны загружать программное обеспечение, и обычно, когда я подключаю свой ноутбук к компьютеру с помощью кабеля Ethernet, я должен установить свой адрес IPv4 на 10.10.1.99, потому что на компьютере обычно есть 10.10.1.101в качестве IP-адреса я загружаю программное обеспечение на этот компьютер.Теперь иногда компьютер имеет неправильную предустановку IP-адреса, например 10.41.246.70 или 10.42.246.71.

Поскольку у нас нет простого и быстрого способа проверить, какой IP-адрес у компьютера, я написал небольшой скрипт, который меняетсяIPv4 моего ноутбука на наиболее распространенные IP-адреса, которые обычно имеют компьютеры, и позволяют ему проверять эти IP-адреса: код выглядит так, и он проверяет около 8 IP-адресов:

cls
echo Searching.
netsh interface ip set address "Ethernet" static 10.10.1.99 255.255.255.0 >nul: 2>nul:
ping -w 4 -n 3 10.10.1.101
if !errorlevel!==0 (
    set activeip=10.10.1.101
    goto :ipfound
)

Теперь этот код обычноработает просто отлично, в 99% случаев это один из 8 известных нам IP-адресов.Проблема в том, что иногда вместо «Запрошено время ожидания» я получаю «Узел назначения недоступен», что по какой-то причине не является ошибкой, и когда я получаю Узел назначения недоступен, скрипт думает, что нашел правильный IP-адрес.Теперь есть способ обойти это, например, добавив что-то вроде:

if output == Destination Host Unreachable (goto next IP)

или есть способ сообщить сценарию, что целевой хост недоступен, также является ошибкой.

Спасибо всем, кто может помочь любым способом.

1 Ответ

0 голосов
/ 18 марта 2019

Поскольку Reply from xx.xx.xx.xx: Destination Host Unreachable технически все еще является ответом .. :)

Вы можете использовать findstr для манипулирования вашим errorlevel

ping -w 4 -n 3 10.10.1.101 | findstr /i "TTL"
if "%errorlevel%"=="0" echo Success
if "%errorlevel%"=="0" echo Failed

Имейте в виду, что errorlevel здесь устанавливается на основе результата findstr (соответствует ли ваша строка findstr тому, что вы просили ее найти).

Чтобы продемонстрировать, это вернет errorlevel из 0, потому что была найдена строка поиска:

ping -w 4 -n 3 10.10.1.101 | findstr /i "Destination Host Unreachable"
echo %errorlevel%

Итак, наконец, чтобы изменить ваш скрипт, чтобы всегда проверять фактические reply from, а не destination host unreachable, и переходить к следующему IP, пока мы не найдем активный IP, просто выполните:

set "ips=10.10.1.101 10.10.1.102 10.10.1.103 10.10.1.104"
for %%i in (%ips%) do ( 
    ping -w 4 -n 3 %%i | findstr /i "TTL"

    if "!errorlevel!"=="0" (
        set "activeip=%%i"
        goto :ipfound
  )
)

Вы должны просто изменить список IP-адресов, которые вы хотите, где я set мои IP-адреса.

Кроме того, я предполагаю, что вы уже установили EnableDelayedExpansion где-то, видя, что вы его используете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...