Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Скрипт для выбора VPN (http://forum.oszone.net/showthread.php?t=259045)

Apache 20-04-2013 16:22 2136416

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

CyberMuesli 21-04-2013 13:22 2136930

вариант а) проверить errorlevel
вариант б) попинговать яндекс

Apache 21-04-2013 16:47 2137028

А как это будет выглядеть в виде скрипта? Просто я домашний пользователь, которому нужен постоянный интернет.

CyberMuesli 21-04-2013 23:28 2137309

в идеале надо решать вопрос с провайдером, а не писать скрипты

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

Apache 22-04-2013 01:25 2137370

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

@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 2139602

Вопрос актуален..... :)

CyberMuesli 25-04-2013 19:56 2139603

а что не работает?

Apache 25-04-2013 23:28 2139716

Просто писали, что не всегда корректно проверяет при таком использовании команды ping. А пока не довелось проверить скрипт в деле, хотелось бы чтобы более опытные люди подсказали, что бы не возникло проблем при обрыве. Или может быть в данной ситуации есть какие-то стандартные отработанные решения, которые я не реализовал.

Molchune 26-04-2013 09:47 2139810

Цитата:

Цитата Apache
Просто писали, что не всегда корректно проверяет при таком использовании команды ping. А пока не довелось проверить скрипт в деле, хотелось бы чтобы более опытные люди подсказали, что бы не возникло проблем при обрыве. Или может быть в данной ситуации есть какие-то стандартные отработанные решения, которые я не реализовал. »

Просто ping может выдавать разные варианты ответа.
При использовании:
Цитата:

Цитата Apache
ping ya.ru |>nul find /i "TTL=" && echo Интернет - ок »

проверяется, что пишет пинг, если в ответе есть "TTL=" то считается что пинг до узла есть.

А при использовании ping ->ErrorLevel то в случае когда не подключен кабель, или заблокировано он не всегда возвращает ненулевой errorlevel. Поэтому и считается, что обработка по "TTL=" более точная.

CyberMuesli 26-04-2013 11:25 2139847

не помешает еще rasdial /disconnect
Ну и вообще с логикой в скрипте проблемы
начинать надо не с установки соединения, а с проверки интернета

Apache 26-04-2013 14:59 2139981

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

Iska 26-04-2013 15:58 2140029

Цитата:

Цитата Apache
Molchune, Тоесть после двух амперсандов выполняется код в строке, если есть "TTL=". А если нет, то просто переход на новую строку? »

В общем — да.

CyberMuesli 26-04-2013 17:35 2140096

Цитата:

Цитата Apache
А по поводу логики установки - скрипт должен запускаться с компьютером и, соответственно, интернет еще не запущен. »

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

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

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

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

Apache 26-04-2013 18:56 2140135

CyberMuesli, Понятно, спасибо,

Apache 28-04-2013 02:40 2140910

Значит я опробовал скрипт в деле. Оказывается он не знает команды sleep.

CyberMuesli 28-04-2013 02:41 2140911

это точно

Apache 28-04-2013 02:54 2140914

Оказывается в Windows 7 появилась замечательная команда timeout. Всем спасибо за помощь, все отлично работает!


Время: 07:24.

Время: 07:24.
© OSzone.net 2001-