пакетный файл для проверки соединения vpn, когда онлайн / вверх - PullRequest
0 голосов
/ 19 февраля 2019

Мне нужно проверить соединение vpn, когда он-лайн / вверх с пакетным файлом.

На самом деле я использую этот код:

PING -n 5 www.google.com|FIND /I "TTL">NUL

IF NOT "%ERRORLEVEL%"=="1" (
Echo "Vpn Connection Is Up"
)
IF "%ERRORLEVEL%"=="1" (
Echo "Vpn Connection Is Down"
)

Иногда пингдать неотвеченный ответ или дать общий ответ об ошибке.

Я хотел бы знать, что существует лучшая альтернатива пакетного кода, чем команда ping.

Я пробовал эту альтернативную коды, но не распозналvpn когда онлайн / вверх, потому что адаптер всегда установлен на моем компьютере.

Первый альтернативный код:

ipconfig|find /i "VPN" && GOTO startAPP || GOTO connectVPN

Второй альтернативный код:

ipconfig|find /i "VPN"

if %errorlevle%==1 goto:connectVPN

echo Starting APP !
exit/b

:connectVPN
echo connecting to VPN

Третий альтернативный код:

:start
cls
rasdial | find /I "%vpnname%" > nul
if errorlevel 1 goto vpndown
if errorlevel 0 goto vpnup

Можете ли вы порекомендовать альтернативную команду ping для интеграции в мой пакетный код, пожалуйста?

Код альтернатив не распознает, когда vpn-соединение подключено, он распознает, установлен ли на моем компьютере адаптер, но мне нужно знать, когда vpn подключен / готов (готов к работе в Интернете).

Ответы [ 3 ]

0 голосов
/ 19 февраля 2019

Я думаю, что если вы включите PowerShell в свой пакет (или PowerShell самостоятельно), вы сможете увидеть, установлено ли соединение.

@echo off
for /f "tokens=2" %%i in ('powershell "Get-NetAdapter | select Name,Status" ^| findstr /i "Wifi"') do (
   if /i "%%i"=="up" echo VPN %%i
   if /i "%%i"=="down" echo VPN %%i
)

Вы также можете сначала выполнить пинг Google, а затем, если возникнет проблеманайдено, пропингуйте шлюз, если есть проблема, проверьте соединение, что-то вроде этого:

@echo off
:start
ping -n 2 www.google.com | findstr /i "ttl">nul
if not "%errorlevel%"=="0" (
    echo "Oops something is wrong, let's test gateway"
    goto testgate
) else (
    echo "Internet Still reachable"
    timeout 5 /nobreak>nul
    goto start
)

:testgate
ping -n 2 10.3.1.1 | findstr /i "ttl">nul
if not "%errorlevel%"=="0" (
    echo "Hmm, gateway also not reachable, will test VPN"
        for /f "tokens=2" %%i in ('powershell "Get-NetAdapter | select Name,Status" ^| findstr /i "VPN"') do (
           if /i "%%i"=="up" (
               echo "Adapter connection %%i, will retry internet ping now"
               goto start
     ) else  (
               echo Adapter connection Down or Disconnected
               echo let's start something up
               pause
               goto start
               goto :eof
           )
        )
      ) else (
          echo "Gateway Connection Is Up"
          goto start
 )
0 голосов
/ 19 февраля 2019

Другой способ сделать это - использовать команду rasdial, которая используется для VPN-подключений.Особенно, используйте:

@echo off

rasdial | findstr /ic:"No" >nul
if not %errorlevel% EQU 0 (
    echo Found a VPN connection!
    goto :found
) else (
    echo We didn't find any VPN connections!
    goto :notfound
)

:found
rem Do something if a VPN connection is found/online:

:notfound
rem Do something if a VPN connection isn't found/online:
0 голосов
/ 19 февраля 2019

Лучший способ сделать это - использовать netsh wlan show networks.Эта команда покажет вам ваш текущий подключенный сетевой адаптер.Мы можем использовать find /I "VPN", чтобы посмотреть, подключен ли ваш VPN .%ERRORLEVEL% позволит вам извлечь да / нет.

Is-VPN-Up.Bat:

netsh wlan show networks | FIND "VPN" /I /C >NUL
IF Not "%ERRORLEVEL%"=="1" (
    Echo "Vpn Connection Is Up"
) ELSE (
    Echo "Vpn Connection Is Down"
)
...