сделать пакетный скрипт для IP - PullRequest
0 голосов
/ 20 апреля 2020

Привет, мой коллега спросил, могу ли я написать сценарий. Я уверен, что я хочу, чтобы он это сделал, и написал какой-то псевдокод в стиле bash, что, конечно, для него неприменимо, поскольку он работает на Windows. Поэтому я попытался внедрить его в сценарий .bat, и здесь мои знания немного невелики. Мне нужен скрипт, чтобы подключиться к определенному VPN-ip, если он недоступен, локальная система должна перенаправить его на другой VPN, чтобы он не беспокоился об этом. Любой из 2 всегда должен быть доступным. Но они никогда не бывают одновременно. Это для тестовой оснастки.

Pseudo bashcode

    while true 
  do
  From local if 
    10.10.1.15 avaible connect to it 
    else
    10.168.84.47 connect to it
  elseif
   try to connect to 10.10.1.15 again && verify that'
                else 
                    echo 'error device over VPN unavaible'  

Мой пакетный сценарий «Попытка», я почти уверен, что то, что у меня сейчас, не сработает

@setlocal enableextensions enabledelayedexpansion
@echo off
set ipaddr=%1
:loop
set state=down
for /f "tokens=5,6,7" %%a in ('ping -n 1 !ipaddr!') do (
    if "x%%b"=="xunreachable." goto :endloop
    if "x%%a"=="xReceived" if "x%%c"=="x1,"  set state=up
)
:endloop
echo.Link is !state!
ping -n 6 10.10.1.15 >nul: 2>nul:
goto :loop
endlocal


IF EXIST 10.10.1.15 (
    is reacheable connect
) ELSE (
    netsh interface portproxy add v4tov4 listenport=80 connectaddress=10.10.1.15 fowardaddress=10.168.84.47
)

1 Ответ

1 голос
/ 20 апреля 2020

Насколько я знаю, вы можете просто попытаться найти "ttl =", чтобы определить успех / неудачу для проверки связи, не беспокоясь о всех этих токенах и различных версиях cmd. Я уверен, что кто-то исправит меня, если я ошибаюсь.

не проверено

set ip=127.0.0.1

rem 2 pings waiting 900ms for a reply
ping -n 2 -w 900 %ip%|find /i "ttl=">nul || goto :fail

rem If we get here then the ping succeeded
rem do what you want here

goto :eof

:fail
rem If we get here then the ping failed.
rem do what you want here

goto :eof

Оператор || в основном означает «если предыдущая команда не выполнена, то сделай это ".

...