Показать полную графическую версию : Скрипт для выбора VPN
Здравствуйте! Есть подключение по L2TP VPN и PPTP VPN. Не могли бы Вы мне подсказать скрипт, позволяющий автоматически подключать один из работающих видов подключения (а если ни один недоступен, то циклически пробовать подключение к каждому из них), а так же в случае падения подключения имеющий возможность также переподключения на одно из работающих?
На данный момент воспользовался rasdial, но как с нее информацию об ошибке при подключении взять?
CyberMuesli
21-04-2013, 13:22
вариант а) проверить errorlevel
вариант б) попинговать яндекс
А как это будет выглядеть в виде скрипта? Просто я домашний пользователь, которому нужен постоянный интернет.
CyberMuesli
21-04-2013, 23:28
в идеале надо решать вопрос с провайдером, а не писать скрипты
ping ya.ru | find "TTL"
if !errorlevel!==0 (
echo Интернет есть
) else (
echo Интернета нет
)
Спасибо за помощь! С провайдером решать не получается, поскольку интернет поставляется "как есть" бесплатно институтом.
Вроде навеял что-то, подскажите если что не так
@Echo off
echo Delay 1 minutes for system full start
echo System started %date% %time% >> c:/restart.log
:connL2TP
sleep 60
rasdial L2TP user pass
sleep 10
echo Testing Internet connection....
ping ya.ru > nul
if ErrorLevel 1 goto connPPTP
goto standby
:connPPTP
sleep 60
rasdial PPTP user pass
sleep 10
echo Testing Internet connection....
ping ya.ru > nul
if ErrorLevel 1 goto connL2TP
goto standby
:standby
sleep 1800
echo Testing Internet connection....
ping ya.ru > nul
if ErrorLevel 1 goto restart
goto standby
:restart
echo Restarting....
echo =============================================== >> c:/restart.log
echo Internet connection lost %date% %time% >> c:/restart.log
echo =============================================== >> c:/restart.log
goto connL2TP
Но еще вычитал рекомендуют пользоваться так утилитой ping ввиду большей надежности
ping ya.ru |>nul find /i "TTL=" && echo Интернет - ок
Но что-то непонятен ее процесс, не могли бы пояснить на примере адаптации к моему случаю?
CyberMuesli
25-04-2013, 19:56
а что не работает?
Просто писали, что не всегда корректно проверяет при таком использовании команды ping. А пока не довелось проверить скрипт в деле, хотелось бы чтобы более опытные люди подсказали, что бы не возникло проблем при обрыве. Или может быть в данной ситуации есть какие-то стандартные отработанные решения, которые я не реализовал.
Molchune
26-04-2013, 09:47
Просто писали, что не всегда корректно проверяет при таком использовании команды ping. А пока не довелось проверить скрипт в деле, хотелось бы чтобы более опытные люди подсказали, что бы не возникло проблем при обрыве. Или может быть в данной ситуации есть какие-то стандартные отработанные решения, которые я не реализовал. »
Просто ping может выдавать разные варианты ответа.
При использовании:
ping ya.ru |>nul find /i "TTL=" && echo Интернет - ок »
проверяется, что пишет пинг, если в ответе есть "TTL=" то считается что пинг до узла есть.
А при использовании ping ->ErrorLevel то в случае когда не подключен кабель, или заблокировано он не всегда возвращает ненулевой errorlevel. Поэтому и считается, что обработка по "TTL=" более точная.
CyberMuesli
26-04-2013, 11:25
не помешает еще rasdial /disconnect
Ну и вообще с логикой в скрипте проблемы
начинать надо не с установки соединения, а с проверки интернета
Molchune, Тоесть после двух амперсандов выполняется код в строке, если есть "TTL=". А если нет, то просто переход на новую строку?
CyberMuesli, Кстати да, действительно, надо еще отключать, забыл, спасибо. А по поводу логики установки - скрипт должен запускаться с компьютером и, соответственно, интернет еще не запущен.
Molchune, Тоесть после двух амперсандов выполняется код в строке, если есть "TTL=". А если нет, то просто переход на новую строку? »
В общем — да.
CyberMuesli
26-04-2013, 17:35
А по поводу логики установки - скрипт должен запускаться с компьютером и, соответственно, интернет еще не запущен. »
Начинать надо с проверки соединения - это будет правильно работать в любых условиях.
Вы расчитываете на особые условия, а это дополнительный усложняющий (а значит и глючный) фактор.
Это как программист говорит - вот в этом месте я не буду переменную инициализировать, т.к. всё равно после работы вот этого цикла она имеет вот такое значение, а мне оно как раз и нужно.
Вам все равно придется снимать этот скрипт с выполнения, запускать его вручную и так далее. Просто измените его логику на универсальную. И Вам не придется помнить, при каких условиях он правильно работает и соблюдать эти условия.
Попробуйте всё упрощать, а не усложнять. Вам понравится, обещаю
CyberMuesli, Понятно, спасибо,
Значит я опробовал скрипт в деле. Оказывается он не знает команды sleep.
CyberMuesli
28-04-2013, 02:41
это точно
Оказывается в Windows 7 появилась замечательная команда timeout. Всем спасибо за помощь, все отлично работает!
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.