PDA

Показать полную графическую версию : [решено] Переподключение до посинения.%)


besuperhero
18-07-2016, 03:04
Может кто встречался с подобной практикой...
Дело в том, что мой 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
21-07-2016, 06:36
Если подсеть правильного пула адресов у всех одинаковая, то должен подойти этот скрипт


@(
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
21-07-2016, 12:46
dirigar, Спасибо за ответ, попробовал заранить скрипт, получил флуд:
"Достигнут уровень рекурсии, максимально возможный для команды SETLOCAL."
Неэффективная подсеть: 95.46.0.0/16
Эффективная подсеть: 31.135.0.0/16

dirigar
21-07-2016, 21:30
хм. зацикливание возможно. Поправил: 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
25-07-2016, 14:48
dirigar, Спасибо Вам большое! Все работает!

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

Еще раз, благодарю!




© OSzone.net 2001-2012