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

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

TakedaSun 02-05-2010 12:23 1405117

батник который проверял бы пинг, обрывал соединение при ошибке, потом снова подключал
 
Есть проблема с VPN интернетом. Периодически пропадает инет через VPN, при этом он не обрывается, а перестают пинговатся сервера с инета.
Если вручную переподключиться то работает снова.
Нужен батник который проверял бы пинг, например с mail.ru, обрывал соединение при ошибке пинга, потом снова подключался и так по кругу.

На IXBT нашел такой скрипт, но он просто проверяет подключение, а мне нужно что бы был еще и ping

@echo off
:: Имя соединения
set connection=My VPN Connection

:: Задержка между проверками, секунд (примерно)
set pause=10

:LOOP
set connected=0
for /f "delims=" %%i in ('rasdial') do (
if "%%i"=="%connection:"=%" set connected=1
)
if %connected%==0 (
echo %date% %time% "%connection%" connection not detected. Dialing...
rasdial "%connection:"=%"
) else (
echo %date% %time% "%connection%" connection is active.
)
ping -n %pause% 127.0.0.1>nul 2>&1
goto LOOP

amel27 02-05-2010 12:44 1405122

Цитата:

Цитата TakedaSun
мне нужно что бы был еще и ping »

Код:

set connected=0
ping -n 1 mail.ru >nul&& set connected=1


TakedaSun 02-05-2010 12:50 1405123

amel27, Спасибо за ответ, но в какую часть кода вставить строку ping -n 1 mail.ru >nul&& set connected=1.

amel27 02-05-2010 13:55 1405154

TakedaSun, отметил же - сразу после "set connected=0"

TakedaSun 02-05-2010 14:04 1405157

amel27,
выдает

02.05.2010 12:59:49,68 "VPN" connection not detected. Dialing...
Установка связи с VPN...
Проверка имени и пароля пользователя...

Ошибка службы удаленного доступа 691 - Доступ запрещен, поскольку такие имя поль
зователя или пароль недопустимы в этом домене.

Чтобы вывести сведения о данной ошибке:
введите 'hh netcfg.chm' и в Справке
выберите раздел разрешения проблем, затем сообщений об ошибках и найдите


VPN - имя подключения.

Если подключиться обычным способом то работает, имя и пароль заполнены и сохранены.
Как в батнике прописать имя и пароль?

TakedaSun 02-05-2010 14:29 1405170

Похоже этот скрипт кривой, не работает как надо, может реализовать можно с помощью команды rasphone ?

1. проверка vpn подключения, если нет - подключить
2. проверка ping mail.ru если не пингуется разорвать подключение и снова подключить.
3. (задержка 15 сек), и так по кругу.

amel27 02-05-2010 15:11 1405183

Цитата:

Цитата TakedaSun
Как в батнике прописать имя и пароль? »

Код:

rasdial /?

TakedaSun 02-05-2010 15:34 1405195

amel27, скрипт указанный выше не подходит для моей проблемы как оказалось.

мне нужен такой:

1. проверка vpn подключения, если нет - подключить
2. проверка ping mail.ru если не пингуется разорвать (именно разорвать главная цель моего вопроса) подключение и снова подключить.
3. (задержка 15 сек), и так по кругу.

Уже голова кипит, не могу качать крупные файлы, стоит отойти от компьютера на один часик, как закачка останавливается. И приходится разрывать подключение вручную и снова подключаться.

amel27 02-05-2010 15:51 1405204

Цитата:

Цитата TakedaSun
именно разорвать главная цель моего вопроса »

эту тему смотрели?.. CMD/BAT - Скрипт автоматического переподключения vpn-соединение

TakedaSun 02-05-2010 16:35 1405219

amel27, Тему посмотрел, не получается переписать под мои нужды, не силен в скриптах.
Добрые люди напишите готовый, сил уже нет.

amel27 02-05-2010 16:56 1405228

TakedaSun, скрипты скриптами, но отладка вашего батника зависит от конкретного оборудования и настроек, а Вы до сих пор не определились, какими командами вы собираетесь подключать/отключать соединение (к слову, в указанной выше теме применяется ДВА способа - RasDial и DevCon)... я могу помочь в логике батника, но команды подключения/отключения тестировать придется самим (увы, VPN под рукой нет)

registeruser1 09-05-2010 00:36 1409689

Помогите пож-ста кусочком кода...
Нужно сделать на батник пароль.

ЦЕЛЬ-
Сделать в батнике что бы при запуске он проверял на удаленной машине СОДЕРЖИМОЕ текстового файлика (это будут только цифры мин 4 макс 6 цифр), далее запрашивал ввести эти цифры не показывая их на экране и при совпадении введенных цифр и содержимого текстового файлика - команды выполняются дальше, при НЕ совпадении их - команда EXIT.
Путь к файлу такой -
Код:

\\terminal_1\c$\WINDOWS\addins\pass.txt
Делаю так, работает -
Код:

@echo off
:pass
echo Enter password:
set /p pwd=
if %pwd%== 777 goto :_1
goto :pass
:_1
ping 127.0.0.1
pause

Но не это цель. Нужно что бы он считал с pass.txt содержимое и при совпадении этого содержимого и введенного с клавиатуры, выполнял команды дальше...
ТАК ВОТ КАК ЗАСТАВИТЬ ЕГО СЧИТЫВАТЬ ПО УКАЗАННОМУ ПУТИ, И СРАВНИВАТЬ ЭТИ ДАННЫЕ???


Очень надеюсь на вашу помощь, заранее благодарю...

Iska 09-05-2010 04:46 1409734

Код:

@echo off
setlocal

set sPath=\\terminal_1\c$\WINDOWS\addins\pass.txt
for /f "usebackq delims==" %%i in ("%sPath%") do set sPassword=%%i

set /p sInPassword=Enter password:

if "%sPassword%" neq "%sInPassword%" exit /b 1
ping 127.0.0.1
pause

endlocal
exit /b 0

registeruser1, в данной теме вопрос выглядит явным оффтопиком.

Я тоже добавлю немного оффтопика:
читать дальше »
при таком подходе можно и не спрашивать никакого пароля. Мало-мальски приемлемый подход:
  • хранение в файле не самого пароля, а его хэша;
  • при вводе пароля — вычисление его хэша;
  • сравнение хэшэй;
и т.д.


P.S. Скорее всего, вычисление хэша (того же MD5, або иных) потребует либо сторонних утилит, либо другого языка — WSH/PowerShell.

registeruser1 09-05-2010 07:56 1409741

Iska, спасибо большое - то что надо!
Маленький нюанс еще - можно в этом коде прописать что бы он искал только в первой срочке файла pass.txt, на остальные не обращал внимания?
Спасибо большое...

Сорри если оффтоп...

Iska 09-05-2010 09:13 1409756

Я ещё сразу хотел так сделать ;), но решил не усложнять. Можно, например, так:
Код:

@echo off
setlocal

set sPath=\\terminal_1\c$\WINDOWS\addins\pass.txt
for /f "usebackq delims==" %%i in ("%sPath%") do set sPassword=%%i&& goto :Break
:Break

set /p sInPassword=Enter password:

if "%sPassword%" neq "%sInPassword%" exit /b 1
ping 127.0.0.1
pause

endlocal
exit /b 0

но, помнится, я видел здесь и более элегантный способ.

registeruser1 09-05-2010 10:27 1409771

Iska, ...супер!

Но теперь проблемка в связи с этим нарисовалась -
- если удалить файл пароля pass.txt, то в моей консоли можно просто нажать ENTER и без проблем войти в меню.

Нужно к этому коду прикрутить проверку наличия этого файла (pass.txt) и если его нет - надпись типа "SORRY, PASSWORD NO VALID, press any key for exit".
А если файл есть, но пустой, та же надпись - "SORRY, PASSWORD NO VALID, press any key for exit".

Буду очень признателен если поможете в этом...

registeruser1 09-05-2010 15:05 1409874

...решил перевую задачу -

Код:

dir \\terminal_1\c$\WINDOWS\addins\pass.txt* /a-d 2>nul >nul && goto :menu
goto :error

Нужно решить теперь как при наличии файла НО отсутствии в нем пароля тоже что бы не открывался. (если файл есть - но пустой)

Iska 09-05-2010 19:00 1409985

Цитата:

Цитата registeruser1
если удалить файл пароля pass.txt »

Вообще-то сие задаётся правами.
Код:

@echo off
setlocal

set sPath=\\terminal_1\c$\WINDOWS\addins\pass.txt

if not exist "%sPath%" echo.SORRY, PASSWORD NO VALID, press any key for exit& pause >nul & exit b /2
for %%i in ("%sPath%") do if "%%~zi" equ "0" echo.SORRY, PASSWORD NO VALID, press any key for exit& pause >nul & exit b /3
for /f "usebackq delims==" %%i in ("%sPath%") do set sPassword=%%i&& goto :Break
:Break
set /p sInPassword=Enter password:

if "%sPassword%" neq "%sInPassword%" exit /b 1
ping 127.0.0.1
pause

endlocal
exit /b 0


registeruser1 09-05-2010 21:49 1410051

...Благодарю, работает.! )

P.s.
Я знаю что cmd не поддерживает *** звездочки, а можно как-нибудь скрыть ввод паролей в консоль?
Что бы он команды введенные с клавы понимал, но просто не показывал их...

И еще, весь этот код будет на vista и 7-ке работать? Сам на XP сижу, пока не переходил еще, да и под рукой их нет - не могу проверить...

Спасибо за помощь...
С уважением...

PERMYAK 07-10-2010 15:35 1513603

Я тоже к этой темке прилпну :)

Меня интересуют чуток попроще.

Есть интернет соединение по РРРОЕ, иногда бывает такое, что соединение есть, а интернета и пинга нет.

Задача такова, что надо просто разорвать соединение, если нет пинга

Delirium 07-10-2010 17:14 1513693

PERMYAK, правила форума - один вопрос - одна тема. Для своих вопросов создавайте отдельные темы.

Anonymоus 07-10-2010 21:45 1513892

Цитата:

Цитата PERMYAK
Есть интернет соединение по РРРОЕ, иногда бывает такое, что соединение есть, а интернета и пинга нет. »

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

Код:

@Echo Off

Rem Максимальное число реконнектов при потере сервера
Set /A Reconnect="6"
:Main
Rem Имя вашего соединения (скопируйте из "Сетевые подключения")
Set Connection="Sevenline VPN-6"
Rem Имя пользователя
Set User="inquisitor"       
Rem Пароль
Set Pass="*********"                 
Rem Максимальное кол-во попыток подключения
Set Max="10"
Rem Здесь устанавливаем адрес сайта, по доступности к которому будем проверять наличие интернета. К примеру - 209.85.229.104 - google
Set Site=209.85.229.104
Rem Таймаут между проверками (секунды)
Set TimeOut=120
Set /A TimeOut=TimeOut*1000
Rem Устанавливаем время ожидания до повторного подключения (секунды)
Set RetryTime=300
Set /A RetryTime=RetryTime*1000


Set NC=".\bin\nc.exe"
Set /A i="0"
           
:Loop   
    Echo.
    Echo Идет соединение с %Connection%...
    Echo Попытка #%i%
    RasDial %Connection% %User% %Pass% 2>Nul 1>&2
    If %ErrorLevel% GTR 0 (
        Echo Ошибка при соединении с %Connection%, подключаемся заново.
        Set /A i="i + 1"
        If "%i%" == %Max% GoTo Fail
        GoTo Loop
    ) Else (
        Echo.
        Echo Соединено.
        Echo.
        Echo.
        %NC% Wait 15000
        GoTo Watch
    )

:Fail
    Echo.
    Echo.
    Echo.
    Echo Соединится с %Connection% не удалось.
    Echo.
    Echo Ждём и пробуем ещё раз (осталось %Reconnect% попыток).
    %NC% Wait %RetryTime%
    Set /A Reconnect="Reconnect - 1"
    If "%Reconnect%" LEQ "0" Echo Число попыток соединения исчерпано&GoTo EOF
    GoTo Main

:Watch
    Set /A t="0"
    :ReCheck
        Ping -n 1 %Site%>nul
        Set /A t="t + 1"
        Echo [%date% - %time:~-0,8%]  Проверка соединения #%t%
        If %ErrorLevel% GTR 0 (
            Echo Соединение %Connection% недоступно, попытка переподключения...
            RasDial %Connection% /DISCONNECT
            GoTo Main
        ) Else (
            Echo Соединение %Connection% доступно.
            %NC% Wait %TimeOut%
            GoTo ReCheck
        )

:EOF

UPD: Забыл добавить - скрипт требует консольную версию утилиты NirCmd (для организации задержки), создайте рядом со скриптом папку bin и поместите туда exe-файл NirCmd, переименовав его в nc.exe

interminable 17-02-2011 12:50 1615248

Вопросец по строке:
Ping -n 1 %Site%>nul
Бывает такое, что из-за торрента пинг с первого раза не пройдет. И все комп выключился...
а если поставить значение не 1, а 2 то пинговать будет 2 раза....что будет если 1 раз пройдет а 2-й нет или наоборот???

Anonymоus 18-02-2011 14:50 1616188

Цитата:

Цитата interminable
пинговать будет 2 раза....что будет если 1 раз пройдет а 2-й нет »

Если хотя бы раз пройдет - все в порядке, это не будет считаться обрывом соединения.


Время: 14:31.

Время: 14:31.
© OSzone.net 2001-