CMD/BAT - [решено] Переподключение до посинения.%)

Ответить
Аватара пользователя
besuperhero

CMD/BAT - [решено] Переподключение до посинения.%)

Сообщение besuperhero »

Может кто встречался с подобной практикой...

Дело в том, что мой ISP имеет в пуле 2 диапазона IP-адресов, один из которых можно назвать менее эффективным (новая подсеть - блокировка со стороны ресурсов).

С полноценными скриптами не сталкивался, поэтому меня хватило лишь на:



Код:

Код: Выделить всё

@echo off
:rc
rasdial /DISCONNECT
rasdial dial-name log psw
netsh int ipv4 show addresses dial-name| findstr IP
set /p choice="r - reconnect; e - exit: "
if not defined choice goto rc
if "%choice%"=="r" goto rc
if "%choice%"=="e" exit

Как вы понимаете, ENTER - в атаке...)



Можно ли что-нибудь придумать с проверкой получаемого IP-адреса/подсети и в случае неудовлетворительного результата goto rasdial?
Аватара пользователя
dirigar

Re: CMD/BAT - [решено] Переподключение до посинения.%)

Сообщение dirigar »

Если подсеть правильного пула адресов у всех одинаковая, то должен подойти этот скрипт





Код:

Код: Выделить всё

@(
setlocal enabledelayedexpansion
echo off
)
set "RightSubnet=192.168.123."
set "eth=dial-name"
:rc
rasdial /DISCONNECT
rasdial "!eth!" log psw
echo.& echo wait 3 seconds & ping -w 3000 127.255.255.255 -n 1 > nul
for /f "tokens=2" %%i in (
'netsh int ipv4 show addresses  "!eth!" ^| find /i "ip"'
) do  set "ip=%%~i"
echo Current ip = !ip!
echo %ip% | find /i "!RightSubnet!" >nul && (
echo Success, the address is good
) || (
echo Warning, the aaddress does not match
GOTO :rc
)
pause
(echo on
endlocal
exit /b %error%
)
Аватара пользователя
besuperhero

Re: CMD/BAT - [решено] Переподключение до посинения.%)

Сообщение besuperhero »

dirigar, Спасибо за ответ, попробовал заранить скрипт, получил флуд:

"Достигнут уровень рекурсии, максимально возможный для команды SETLOCAL."

Неэффективная подсеть: 95.46.0.0/16

Эффективная подсеть: 31.135.0.0/16
Аватара пользователя
besuperhero

Re: CMD/BAT - [решено] Переподключение до посинения.%)

Сообщение besuperhero »

хм. зацикливание возможно. Поправил: 10 Раз пытается переподключиться



Код:

Код: Выделить всё

@(
setlocal enabledelayedexpansion
echo off
)
set "RightSubnet=31.135."
set "eth=dial-name"
set "iter=0"
set "cycles=10"
:rc
rasdial /DISCONNECT
rasdial "!eth!" log psw
echo.& echo wait 1 seconds & ping -w 3000 127.255.255.255 -n 1 > nul
for /f "tokens=2" %%i in (
'netsh int ipv4 show addresses  "!eth!" ^| find /i "ip"'
) do  set "ip=%%~i"
echo Current ip = !ip!
echo %ip% | find /i "!RightSubnet!" >nul && (
echo Success, the address is good
) || (
echo Warning, the aaddress does not match
if !iter! LSS !cycles! set /a "iter+=1" & GOTO :rc
)
echo.
if !iter! GEQ !cycles! (echo Fault. ) else (echo Success)
(echo on
endlocal
exit /b %error%
)
Аватара пользователя
besuperhero

Re: CMD/BAT - [решено] Переподключение до посинения.%)

Сообщение besuperhero »

dirigar, Спасибо Вам большое! Все работает!



Немного подстроил под себя: увеличил количество циклов, убрал задержку между :rc (проходит нормально), добавил выполнение записи дополнительных маршрутов после успешного результата.



Еще раз, благодарю!
Ответить

Вернуться в «Скриптовые языки администрирования Windows»