PDA

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


SharkX58
15-04-2015, 07:32
Подскажите, настроил скрипт ping.vbs для проверки в локальной сети доступности сервера и отправке на почту уведомления, если недоступен. Хочу теперь его использовать еще для мониторинга работы интернета, но не знаю как решить вопрос. Если нет интернета, соответственно он не сможет мне отправить письмо. Как реализовать, цикл, что если есть интернет, скрипт завершается, если нету, то он делает проверку каждые 10 сек например и как только интернет появляется, сразу отправляет на почту уведомление о сбое?
А еще, при проверке досовское окно открывается, можно его сделать скрытым?

[code]

compip = "ya.ru" ' ip адрес сервера, который будем пинговать
LogFilePath = "c:\ping.txt" ' лог-файл
timeout = "30" ' таймаут проверки в секундах

On Error Resume Next


Set objShell = CreateObject("WScript.Shell")

' Пингом проверим что сервер доступен
Set objScriptExec = objShell.Exec("%comspec% /c ping.exe -n 2 " & compip)
strPingResults = LCase(objScriptExec.StdOut.ReadAll)

If InStr(strPingResults, "ttl=") Then
' доступен

' пишем лог
Set FSO = CreateObject("Scripting.FileSystemObject")
Set LogFile = FSO.OpenTextFile(LogFilePath, 8, True)
LogFile.WriteLine Now & " " & compip & " dostypen"
LogFile.Close

'MsgBox compip & " пингуется "
Else
' не доступен
sendmilo()
' пишем лог
Set FSO = CreateObject("Scripting.FileSystemObject")
Set LogFile = FSO.OpenTextFile(LogFilePath, 8, True)
LogFile.WriteLine Now & " " & compip & " net dostypa"
LogFile.Close


sub sendmilo()

v_Conf = "http://schemas.microsoft.com/cdo/configuration/"
Set o_Mess = CreateObject("CDO.Message")
With o_Mess
.To = "" 'куда отправляем
.From = "Имя отправителя <email>" 'имя отправителя + Email
.Subject = "" 'Тема письма
.TextBody = "" 'Сообщение
.AddAttachment "C:\ping.txt" 'Прикрепить файл
.TextBodyPart.Charset = "windows-1251" 'русская кодировка
With .Configuration.Fields
.Item(v_Conf & "sendusing") = 2 'без использования каталога Server Exchange
.Item(v_Conf & "smtpserver") = "" 'Адрес SMTP-сервера
.Item(v_Conf & "smtpauthenticate") = 1 'Тип авторизации
.Item(v_Conf & "sendusername") = "" 'здесь имя пользователя без @
.Item(v_Conf & "sendpassword") = "" 'пароль
.Item(v_Conf & "smtpserverport") = 465 'порт (альтернативный - 465)
.Item(v_Conf & "smtpusessl") = True 'использовать ли шифрованое подключение SSL
.Item(v_Conf & "smtpconnectiontimeout") = 60 'Время до завершения повторных попыток подключения
.Update
End With
.send
End With
Set o_Mess = Nothing
End Sub
' MsgBox compip & " не пингуется. "
End If


'/////////////////////////////Функция отправки почты

[code]

Опиум
15-04-2015, 10:39
И получишь ты уведомление после того как интернет все выходные, например, не работал ))

Я использую различные конструкции типа "маяков", например которые пингуют "меня" каждые 10 минут. Если в течении 700 сек "пинга" не пришло значит аларм. Также хорошо работает sms информирование (нужен простой шлюз)

В твоём случае можно запоминать предыдущее состояние канала, и если он поднялся то шлешь письмо.
типа:

ping лялялятополя -n 10 | find "TTL" || echo >down.f
ping лялялятополя -n 10 | find "TTL" && if exist down.f goto sendmail
goto :EOF

:sendmail
del down.f
rem далее шлешь письмо

SharkX58
15-04-2015, 11:03
Кстати смс это дело. В vbs такое можно реализовать?

Iska
15-04-2015, 12:59
А еще, при проверке досовское окно открывается, можно его сделать скрытым? »
Используйте Wbem и класс «Win32_PingStatus» вместо исполнения класса Automation WshExec и «ping.exe».

Как реализовать, цикл, что если есть интернет, скрипт завершается, если нету, то он делает проверку каждые 10 сек например и как только интернет появляется, сразу отправляет на почту уведомление о сбое? »
Рекомендуется рисование блок-схемы алгоритма. Затем его реализация.




© OSzone.net 2001-2012