imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Интернет, Глобальные и Локальные сети > Сети > FAQ
Опции темы
Старый 07.11.2011, 22:43     # 1
MarkXIII
Newbie
 
Аватар для MarkXIII
 
Регистрация: 31.10.2002
Сообщения: 27

MarkXIII Путь к славе только начался
Lightbulb Connect Checker

Собственно, нужно следущие, пинать извне мой ройтер, скажем раз в 15 минут, на предмет наличия тыранета.

Имеем Asus WL-500gP v2 - Tomato Firmware v1.28.8754 ND USB Ext
Провайдер с статическим IP, *IMSYS он еще на кой то хрен отключил наружу ping, trace..
Ужас.

Хых, Как это сделать грамотно?
Не обязательно даже такую схему реализовывать, суть мне нужно проверить именно стабильность доступа.
MarkXIII вне форума  
Старый 08.11.2011, 00:51     # 2
Borland
СуперМод
IMHO Консультант 2005-2009
 
Аватар для Borland
 
Регистрация: 14.08.2002
Адрес: Московская ПЛ, ракетный отсек
Пол: Male
Сообщения: 14 002

Borland - Гад и сволочь
IMHO.ws Connect Checker 1.0

MarkXIII, чтобы "пинать извне" - нужно иметь какой-то порт открытым наружу (и проброшенным на роутере вовнутрь).
Дальше на этот порт вешается (к примеру) веб-сервис с каким-нить небольшим файликом (пары байт в принципе достаточно).
Дальше с внешнего (по отношению ко всей конструкции) компа обычным GNU Wget по шедулеру тягаешь тот самый файлик, отписываешь в лог-файл время и результат (удачно/неудачно), удаляешь файлик чтоб не мешал, при необходимости выполняешь какие-то ещё действия.
Как вариант - "какой-то сервис" может висеть и на роутере.
Как ещё один вариант - логи может вести и веб-сервер.
Как ещё один вариант - wget может работать изнутри (в т.ч. и на роутере), а файлик качать с внешнего сервиса (www.microsoft.com:80/index.html весит 415 байт192кбайт).
Если изнутри на машине стоит XP (на других Win не сработает) - можно вместо wget использовать встроенный netsh (netsh diag connect iphost www.microsoft.com 80). В отличие от wget - для netsh не нужен никакой файлик, проверяется возможность соединения и только.

<Добавлено утром>
Собственно, вариант "комп с Win за роутером, сервер снаружи"
checker.cmd
Код:
set REMOTEURL=ftp://ftp.mozilla.org/index.html
set WORKFOLDER=c:\checker
set LOGFILE=%WORKFOLDER%\checker.log
set WGETPROG=%WORKFOLDER%\wget.exe


%WGETPROG% --output-document=%WORKFOLDER%\foo.html %REMOTEURL% && call :PASSED ||call :FAILED
goto :EOF

:PASSED
REM есть коннект
1>>%LOGFILE% echo Passed at %DATE% %TIME%
del /q %WORKFOLDER%\foo.html
goto :EOF

:FAILED
REM нет коннекта
REM сюда можно добавить команду переинициализации соединения
1>>%LOGFILE% echo Epic fail at %DATE% %TIME%
goto :EOF
В "Назначенные задания" добавлять командой (предполагая, что всё хозяйство лежит в папке c:\Checker)
Код:
schtasks /create /RU SYSTEM /SC MINUTE /MO 15 /ST 00:00:01 /TR "c:\checker\checker.cmd" /TN "IMHO.ws Connect Checker"
Проверено, работает.
__________________
Не засоряйте форум "спасибами"! Для выражения благодарности существуют ПС и репутация! Соблюдайте Правила!
Распространенье наше по планете
Особенно заметно вдалеке:
В общественном парижском туалете
Есть надписи на русском языке

В. Высоцкий


Последний раз редактировалось Borland; 08.11.2011 в 10:06. Причина: Добавлен пример
Borland вне форума  
Старый 19.02.2012, 19:35     # 3
Borland
СуперМод
IMHO Консультант 2005-2009
 
Аватар для Borland
 
Регистрация: 14.08.2002
Адрес: Московская ПЛ, ракетный отсек
Пол: Male
Сообщения: 14 002

Borland - Гад и сволочь
IMHO.ws Connect Checker 2.0

Возвращаясь к напечатанному.
Счастливым владельцам роутеров DLINK посвящается.
Впрочем, будет работать и на других роутерах с *NIX-based прошивкой.

На этот раз решалась задача "проверить наличие интернета и при отсутствии такового перезагрузить роутер".

Для решения задачи использован единственный несистемный компонент - freeware библиотечка w3sockets для организации telnet-сесcии в скрипте. Идея почерпнута отсюда.

Скрипт проверяет соединение с SMTP-сервером gmail на порт 25, при удачном соединении в лог пишется "Passed at <дата и время>", при неудачном роутеру отправляется команда на перезагрузку и в лог пишется "Epic fail at <дата и время>. Router rebooted".
Checker2.cmd
Код:
@set @script=0 /*
  @echo off
    set @script=


    set "WORKFOLDER=c:\checker2"
    set "LOGFILE=%WORKFOLDER%\checker.log"


    reg query "HKCR\Socket.TCP" && set "W3SOCKET=INSTALLED" || set "W3SOCKET=NOT_INSTALLED" 
    if "%W3SOCKET%"=="NOT_INSTALLED" regsvr32 /s Socket.dll || exit /b
    if "%PROCESSOR_ARCHITECTURE%"=="AMD64" %windir%\syswow64\cscript //nologo //e:jscript "%~dpnx0"|find /i "220" && call :PASSED || call :FAILED
    if "%PROCESSOR_ARCHITECTURE%"=="x86" %windir%\system32\cscript //nologo //e:jscript "%~dpnx0"|find /i "220" && call :PASSED || call :FAILED
    if "%W3SOCKET%"=="NOT_INSTALLED" regsvr32 /u /s Socket.dll
    set "W3SOCKET="
    set "WORKFOLDER="
    set "LOGFILE="   
  exit /b
:PASSED

REM successfully connected
1>>"%LOGFILE%" echo Passed at %DATE% %TIME%
goto :EOF

:FAILED
REM no connection
1>>"%LOGFILE%" echo Epic fail at %DATE% %TIME%. Router rebooted
goto :EOF

*/

var RemoteHost = "smtp.gmail.com:25";
var RouterAddress = "192.168.0.1:23";
var RouterLogin = "admin";
var RouterPassword = "admin";
var RouterCommandPrompt = "#";
var RouterRebootCommand = "reboot";

try {
 var TelnetSession = WScript.CreateObject("Socket.TCP");
 TelnetSession.DoTelnetEmulation = 1;
 TelnetSession.TelnetEmulation = "TTY";
 TelnetSession.host = RemoteHost;
 TelnetSession.Open();
 TelnetSession.WaitFor("220");
 TelnetSession.SendLine("quit");
 TelnetSession.Close();
 WScript.echo(TelnetSession.Buffer);
}
catch(e){
 var RouterSession = WScript.CreateObject("Socket.TCP");
 RouterSession.DoTelnetEmulation = 1;
 RouterSession.TelnetEmulation = "TTY";
 RouterSession.host = RouterAddress;
 RouterSession.Open();
 RouterSession.WaitFor("login:");
 RouterSession.SendLine(RouterLogin);
 RouterSession.WaitFor("password:");
 RouterSession.SendLine(RouterPassword);
 RouterSession.WaitFor(RouterCommandPrompt);
 RouterSession.SendLine(RouterRebootCommand);
 RouterSession.Close();
 WScript.echo(RouterSession.Buffer);
}
Предполагается, что скрипт и библиотечка (файл Socket.dll) лежат в папке c:\Checker2 (переменная WORKFOLDER). Туда же пишется лог-файл. Кладёте в другую папку - поправьте в скрипте и в команде добавления в расписание.
В скрипте использованы умолчальные IP, login и password, характерные для роутеров dlink с оригинальной прошивкой. Соответственно - исправьте на свои, если у вас другие.

RouterCommandPrompt зависит от прошивки и модели роутера. Для Dlink DIR-320 с родной прошивкой это "#", для Asus RT-N16 с "олеговской" это "$". Что у вашего роутера - то и ставьте

RouterRebootCommand - команда перезагрузки роутера. Для доступных мне роутеров это "reboot", если у вашего что-то другое - впишите своё.

В назначенные задания добавляется командой
Код:
schtasks /create /RU SYSTEM /SC MINUTE /MO 15 /ST 00:00:01 /TR "c:\checker2\checker2.cmd" /TN "IMHO.ws Connect Checker 2.0"
Работает на Windows XP и более новых Windows.
Не будет работать, если ваш провайдер заблокировал доступ к внешним серверам по 25 порту!!!
__________________
Не засоряйте форум "спасибами"! Для выражения благодарности существуют ПС и репутация! Соблюдайте Правила!
Распространенье наше по планете
Особенно заметно вдалеке:
В общественном парижском туалете
Есть надписи на русском языке

В. Высоцкий

Borland вне форума  
Старый 20.02.2012, 00:43     # 4
Borland
СуперМод
IMHO Консультант 2005-2009
 
Аватар для Borland
 
Регистрация: 14.08.2002
Адрес: Московская ПЛ, ракетный отсек
Пол: Male
Сообщения: 14 002

Borland - Гад и сволочь
IMHO.ws Connect Checker 1.5

Тут мне на руборде wolf0425 высказал претензию по-поводу обилия JScript в IMHO.ws Connect Cheker 2.0:
Цитата:
Сообщение от wolf0425
вместо одной длинной строчки с ping и wget - пара килобайт яваскрипта и .dll в папке. круто
А мне что, мне не жалко. Есть у меня вариант и без JScript вообще.
Правда, там кроме wget с кучей библиотечек требуется ещё одна доп. программа TSE (Telnet script executor). И файлов несколько поболее...

Checker.cmd:
Код:
set REMOTEURL=ftp://ftp.mozilla.org/index.html
set WORKFOLDER=c:\checker
set LOGFILE=%WORKFOLDER%\checker.log
set WGETPROG=%WORKFOLDER%\wget.exe


%WGETPROG% --tries=3 --output-document=%WORKFOLDER%\foo.html %REMOTEURL% && call :PASSED ||call :FAILED
goto :EOF

:PASSED
REM есть коннект
1>>%LOGFILE% echo Passed at %DATE% %TIME%
del /q %WORKFOLDER%\foo.html
goto :EOF

:FAILED
REM нет коннекта
1>>%LOGFILE% echo Epic fail at %DATE% %TIME%. Rebooting router.
(
echo open 192.168.0.1
echo waitfor "login:"
echo transmit "admin^^M"
echo waitfor "sword:"
echo transmit "admin^^M"
echo waitfor "#"
echo transmit "reboot^^M"
)|tse >>%LOGFILE%
goto :EOF
Как нетрудно заметить - это Checker 1.0 с прикрученной функцией перезагрузки роутера...
Работает... Точнее - уже работало, версию 2.0 я для того и делал, чтобы от лишних файлов избавиться...

Единственный (на мой взгляд) существенный плюс по сравнению с версией 2.0 - wget в принципе всё равно какой файлик, откель и с какого порта тянуть. Можно по http с сайта мокрософта, можно по ftp с сайта мозилы. Нет привязки к smtp...
__________________
Не засоряйте форум "спасибами"! Для выражения благодарности существуют ПС и репутация! Соблюдайте Правила!
Распространенье наше по планете
Особенно заметно вдалеке:
В общественном парижском туалете
Есть надписи на русском языке

В. Высоцкий

Borland вне форума  
Старый 29.02.2012, 20:45     # 5
Borland
СуперМод
IMHO Консультант 2005-2009
 
Аватар для Borland
 
Регистрация: 14.08.2002
Адрес: Московская ПЛ, ракетный отсек
Пол: Male
Сообщения: 14 002

Borland - Гад и сволочь
Если у вас VPN без роутера

Вопрос из другого топика, и довольно старый
Цитата:
Сообщение от StRaNNiK Посмотреть сообщение
как написать скрипт, проверяющий соединение с vpn сервером? И создающим его, если коннекта нет.
Берётся Connect Checker 1.0, и сразу после (или даже вместо ) строчки "REM сюда можно добавить команду переинициализации соединения" добавляется пара команд
Код:
rasdial <Имя соединения> /DISCONNECT
rasdial <Имя соединения> <Имя пользователя> <Пароль>
Естественно, вместо "<Имя соединения> <Имя пользователя> <Пароль>" нужно подставить соответственно имя своего соединения, логин и пароль.

Или даже без использования сторонних утилит вообще:
Код:
>nul ping -n 10 www.ru  |find /i "TTL" ||(
rasdial <Имя соединения> /DISCONNECT
rasdial <Имя соединения> <Имя пользователя> <Пароль>  
)
проверяется наличие отклика www.ru на пинги, при отсутствии такового соединение принудительно разрывается и создаётся заново. Но: если пинги наружу закрыты у провайдера, то этот вариант не сработает.
__________________
Не засоряйте форум "спасибами"! Для выражения благодарности существуют ПС и репутация! Соблюдайте Правила!
Распространенье наше по планете
Особенно заметно вдалеке:
В общественном парижском туалете
Есть надписи на русском языке

В. Высоцкий

Borland вне форума  

Теги (метки)
bat, cmd, connect checker, jscript, router, telnet, telnet скрипт, vpn, проверка соединения, стабильность соединения

Опции темы

Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 07:24.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.