Войти

Показать полную графическую версию : Скрипт для выбора VPN


Apache
20-04-2013, 16:22
Здравствуйте! Есть подключение по L2TP VPN и PPTP VPN. Не могли бы Вы мне подсказать скрипт, позволяющий автоматически подключать один из работающих видов подключения (а если ни один недоступен, то циклически пробовать подключение к каждому из них), а так же в случае падения подключения имеющий возможность также переподключения на одно из работающих?
На данный момент воспользовался rasdial, но как с нее информацию об ошибке при подключении взять?

CyberMuesli
21-04-2013, 13:22
вариант а) проверить errorlevel
вариант б) попинговать яндекс

Apache
21-04-2013, 16:47
А как это будет выглядеть в виде скрипта? Просто я домашний пользователь, которому нужен постоянный интернет.

CyberMuesli
21-04-2013, 23:28
в идеале надо решать вопрос с провайдером, а не писать скрипты

ping ya.ru | find "TTL"
if !errorlevel!==0 (
echo Интернет есть
) else (
echo Интернета нет
)

Apache
22-04-2013, 01:25
Спасибо за помощь! С провайдером решать не получается, поскольку интернет поставляется "как есть" бесплатно институтом.
Вроде навеял что-то, подскажите если что не так

@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 Интернет - ок
Но что-то непонятен ее процесс, не могли бы пояснить на примере адаптации к моему случаю?

Apache
25-04-2013, 19:55
Вопрос актуален..... :)

CyberMuesli
25-04-2013, 19:56
а что не работает?

Apache
25-04-2013, 23:28
Просто писали, что не всегда корректно проверяет при таком использовании команды 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
Ну и вообще с логикой в скрипте проблемы
начинать надо не с установки соединения, а с проверки интернета

Apache
26-04-2013, 14:59
Molchune, Тоесть после двух амперсандов выполняется код в строке, если есть "TTL=". А если нет, то просто переход на новую строку?
CyberMuesli, Кстати да, действительно, надо еще отключать, забыл, спасибо. А по поводу логики установки - скрипт должен запускаться с компьютером и, соответственно, интернет еще не запущен.

Iska
26-04-2013, 15:58
Molchune, Тоесть после двух амперсандов выполняется код в строке, если есть "TTL=". А если нет, то просто переход на новую строку? »
В общем — да.

CyberMuesli
26-04-2013, 17:35
А по поводу логики установки - скрипт должен запускаться с компьютером и, соответственно, интернет еще не запущен. »

Начинать надо с проверки соединения - это будет правильно работать в любых условиях.
Вы расчитываете на особые условия, а это дополнительный усложняющий (а значит и глючный) фактор.

Это как программист говорит - вот в этом месте я не буду переменную инициализировать, т.к. всё равно после работы вот этого цикла она имеет вот такое значение, а мне оно как раз и нужно.

Вам все равно придется снимать этот скрипт с выполнения, запускать его вручную и так далее. Просто измените его логику на универсальную. И Вам не придется помнить, при каких условиях он правильно работает и соблюдать эти условия.

Попробуйте всё упрощать, а не усложнять. Вам понравится, обещаю

Apache
26-04-2013, 18:56
CyberMuesli, Понятно, спасибо,

Apache
28-04-2013, 02:40
Значит я опробовал скрипт в деле. Оказывается он не знает команды sleep.

CyberMuesli
28-04-2013, 02:41
это точно

Apache
28-04-2013, 02:54
Оказывается в Windows 7 появилась замечательная команда timeout. Всем спасибо за помощь, все отлично работает!




© OSzone.net 2001-2012