ПОДРАЗДЕЛЫ


   Список статей
   АРМ с ПК PCAA
   IPAMon + HTTP
   IPAMon + SMTP
   IPAMon + EMail
   Multiple IPAMon
   Файлы из сети
   Перенос файлов
   Многопоточность
   Эмуляция флешек
   Контроль флешек
   Скорость кадров
   Скины SPRuler
   Смайлы ICQ 6/7
   Смайлы QIP
   Смайлы Disqus
   Смайлы Narod.Ru
   Смайлы на сайте

   

«Отчёт на WEB-странице о недоступности хоста...»


( автоматическая отправка данных о недоступности сетевого ресурса на WEB-сервер )



ПРИМЕР МОНИТОРИНГА СЕТЕВОГО РЕСУРСА С ОТПРАВКОЙ ДАННЫХ НА WEB-САЙТ:
( Отправка LOG'а событий на удалённый сервер при длительном отсутствии доступа к хосту (сетевому ресурсу). С использованием в ОС Microsoft Windows программы IPAMon, отправляющей периодические тестовые запросы (PING) хосту по ICMPv4-протоколу )


ЗАДАЧА: Отправлять строки, аналогичные строкам из LOG-файла, на страницу WEB-сайта при длительном отсутствии доступа к хосту (сетевому ресурсу, серверу, компьютеру и т.д.). Одновременно необходимо в режиме реального времени просматривать изменения, происходящие на странице, из любого интернет-браузера, с любого устройства, имеющего доступ к этой странице (сайту).

ОПИСАНИЕ: Для наглядности, в данном примере интервал отправки сообщений на электронную почту, в случае обнаружения недоступности хоста, равен 60 сек. Для более точного срабатывания "тревоги" необходимо подобрать оптимальные значения параметров: "количество ошибок для запуска файла" и "период запросов".


Устанавливаем на компьютер программу IPAMon и запускаем её:


Общие настройки программы:

IPAMon-00


Вариант решения (через VBS и PHP скрипты):

Указываем какой файл запускать:

IPAMon-01

Создаём в папке с программой файл: "error.vbs" (пример можно взять из архива: error.zip)

  Код скрипта error.vbs:

Option Explicit
On Error Resume Next
Dim WSHShell, objArgs, objWEB, objFile, txtFile
Dim isWD(8), isMY(13)
Dim iCnt, nCnt, nSec, nErr
Dim strIP, strTXT, strWait, strFile
Dim zRd, zRh, zRm, zRs
Dim sRd, sRh, sRm, sRs
iCnt = 0
nCnt = 0
nSec = 0
nErr = 0
zRd = 0
zRh = 0
zRm = 0
zRs = 0
sRd = "00000"
sRh = "00"
sRm = "00"
sRs = "00"
strIP = ""
strTXT = ""
strFile = ""
strWait = "00000-00:00:00"
isWD(0) = "Воскресенье"
isWD(1) = "Понедельник"
isWD(2) = "Вторник"
isWD(3) = "Среда"
isWD(4) = "Четверг"
isWD(5) = "Пятница"
isWD(6) = "Суббота"
isWD(7) = "Воскресенье"
isMY(0) = "Декабрь"
isMY(1) = "Январь"
isMY(2) = "Февраль"
isMY(3) = "Март"
isMY(4) = "Апрель"
isMY(5) = "Май"
isMY(6) = "Июнь"
isMY(7) = "Июль"
isMY(8) = "Август"
isMY(9) = "Сентябрь"
isMY(10) = "Октябрь"
isMY(11) = "Ноябрь"
isMY(12) = "Декабрь"
Set objFile = CreateObject("Scripting.FileSystemObject")
If objFile.FileExists("cfgs.res") Then
Set txtFile = objFile.OpenTextFile("cfgs.res", 1)
Do While txtFile.AtEndOfStream <> True
strFile = txtFile.ReadLine
If Len(Trim(CStr(strFile))) > 0 Then nCnt = nCnt + 1
If nCnt = 5 Then nSec = Abs(Int(Trim(CStr(strFile))))
If nCnt = 6 Then nErr = Abs(Int(Trim(CStr(strFile))))
Loop
txtFile.Close
Set txtFile = Nothing
End If
Set objFile = Nothing
If nErr < 2 Then nErr = 1
If nSec < 2 Then nSec = 1
If nErr > 86399 Then nErr = 86400
If nSec > 3599 Then nSec = 3600
nCnt = nSec * nErr
zRd = Abs(Int(nCnt / 86400))
zRh = Abs(Int((nCnt - zRd * 86400) / 3600))
zRm = Abs(Int((nCnt - zRd * 86400 - zRh * 3600) / 60))
zRs = Abs(Int((nCnt - zRd * 86400 - zRh * 3600 - zRm * 60)))
sRd = Trim(CStr(zRd))
sRh = Trim(CStr(zRh))
If Len(sRh) < 2 Then sRh = "0" + sRh
sRm = Trim(CStr(zRm))
If Len(sRm) < 2 Then sRm = "0" + sRm
sRs = Trim(CStr(zRs))
If Len(sRs) < 2 Then sRs = "0" + sRs
strWait = StrReverse(Left(StrReverse(sRd & "-" & sRh & ":" & sRm & ":" & sRs) + "00000", 14))
Err.Clear
Set objArgs = WScript.Arguments
If Err.Number = 0 Then
For iCnt = 0 to objArgs.Count - 1
If Len(Trim(objArgs(iCnt))) > 0 Then
strIP = Trim(objArgs(iCnt))
Exit For
End If
Next
strTXT = "[ " + Left(strIP + "               ", 15) + _
" ]  [ ОШИБКА ]  [ " + strWait + " ]  [ " + _
Trim(CStr(Date())) + " / " + Trim(CStr(Time())) + " / " + _
Trim(CStr(isWD(Weekday(Now, vbMonday))))+ " / " + _
Trim(CStr(isMY(Month(Now)))) + " ]"
Err.Clear
If Len(strIP) > 0 Then
Set WSHShell = WScript.CreateObject("WScript.Shell")
If Err.Number = 0 Then
Set objWEB = CreateObject("MSXML2.XMLHTTP.3.0")
If Err.Number = 0 Then
Randomize()
objWEB.Open "GET", _
"https://server.xx/write.php?log=00000000&txt=" & _
strTXT & "&rnd=" & Rnd(), False
objWEB.Send
End If
Set objWEB = Nothing
End If
End If
Set WSHShell = Nothing
End If
Set objArgs = Nothing
Err.Clear
WScript.Quit 0


Создаём файл "write.php" (пример можно взять из архива: write.zip)

  Код скрипта write.php:

<?php
header('expires: Sat, 01 Jan 2000 00:00:00 GMT');
header('cache-control: no-cache, no-store, max-age=0, post-check=0, pre-check=0, must-revalidate', FALSE);
header('pragma: no-cache');
header("last-modified: ".gmdate("D, d M Y H:i:s ")."GMT");
?>
<?php
$log='';
$txt='';
if(isset($_GET['log']))
{
$log=$_GET['log'];
if($log=='00000000')
{
if(isset($_GET['txt']))
{
$txt=$_GET['txt'];
$txt=trim(strip_tags(trim($txt)));
if(strlen(strval($txt))>0)
{
if(file_exists("./".$log.".txt"))
{
$file=fopen("./".$log.".txt","a");
flock($file,2);
if($file)
{
fwrite($file," ".$txt." ".chr(13).chr(10));
}
}
}
flock($file,3);
fclose($file);
}
}
}
print(" ");
?>


Создаём файл "read.php" (пример можно взять из архива: read.zip)

  Код скрипта read.php:

<?php
header('expires: Sat, 01 Jan 2000 00:00:00 GMT');
header('cache-control: no-cache, no-store, max-age=0, post-check=0, pre-check=0, must-revalidate', FALSE);
header('pragma: no-cache');
header("last-modified: ".gmdate("D, d M Y H:i:s ")."GMT");
$rnd="0.".substr(strval(rand()).strval(rand())."0000000000000000", 0, 16);
?>
<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'>
<html xmlns='http://www.w3.org/1999/xhtml'>
<head>
<title>IPAMon</title>
<meta name='viewport' content='width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no' />
<meta name='language' content='russian, english' />
<meta http-equiv='content-language' content='ru-ru' />
<meta http-equiv='content-script-type' content='text/javascript' />
<meta http-equiv='content-style-type' content='text/css' />
<meta http-equiv='content-type' content='text/html; charset=windows-1251' />
<meta http-equiv='expires' content='Sat, 01 Jan 2000 00:00:00 GMT' />
<meta http-equiv='cache-control' content='no-cache, no-store, max-age=0, post-check=0, pre-check=0, must-revalidate' />
<meta http-equiv='pragma' content='no-cache' />
<meta http-equiv='imagetoolbar' content='no' />
<meta http-equiv='refresh' content='60' />
<meta http-equiv='window-target' content='_top' />
<meta http-equiv='X-UA-Compatible' content='IE=edge' />
<style type='text/css'>
<!--
* {
top: 0px;
left: 0px;
margin: 0px;
padding: 0px;
border: 0px solid #ffffff;
color: #000000;
visibility: visible;
direction: ltr;
font-family: monospace;
font-size: 12px;
font-style: normal;
font-weight: normal;
font-variant: normal;
text-decoration: none;
text-transform: none;
text-align: left;
line-height: 20px;
letter-spacing: normal;
word-spacing: normal;
white-space: normal;
text-indent: 0px;
text-decoration: none;
text-transform: none;
list-style: none;
outline: hidden;
outline-style: hidden;
outline-width: 0px;
table-layout: auto;
empty-cells: show;
caption-side: top;
float: none;
clear: none;
}
html {
width: 100%;
height: 101%;
overflow: auto;
overflow-x: hidden;
overflow-y: auto;
z-index: 0;
}
body {
overflow: hidden;
z-index: 1;
}
pre {
display: block;
white-space: pre;
z-index: 2;
}
-->
</style>
<script language='JavaScript' type='text/javascript'>
<!--
function isRedirect() {
<?php
print("top.location.href='https://server.xx/read.php?log=00000000&rnd=".$rnd."';\n");
?>
};
window.setInterval('isRedirect();', 60000);
//-->
</script>
</head>
<body>
<?php
$log='';
if(isset($_GET['log']))
{
$log=$_GET['log'];
if($log=='00000000')
{
if(file_exists("./".$log.".txt"))
{
print("<pre>\n");
include($log.".txt");
print("\n</pre>\n");
}
}
}
?>
</body>
</html>



Настройка:

01.  Кладём файлы "write.php" и "read.php" на свой сайт, например:
       https://server.xx/write.php
       https://server.xx/read.php

02.  Создаём пустой текстовый файл "00000000.txt" и кладём его туда же:
       https://server.xx/00000000.txt

03.  В файле "read.php" можно задать частоту обновления страницы:
       а) <meta http-equiv='refresh' content='60' /> - в данном примере =60 сек.
       б) window.setInterval('isRedirect();', 60000); - тоже =60 сек.

04.  В файлах "read.php" и "error.vbs" изменяем домен "server.xx" на свой!


Мониторинг:

Открываем в любом браузере ссылку https://server.xx/read.php?log=00000000 и смотрим записи:
Обновление страницы будет происходить автоматически каждые 60 сек., если это значение не было изменено (см. п. 3 выше).


IPAMon-02



P.S.: В целях безопасности, можно изменить название LOG-файла "00000000" и его расширение ".txt" на другие. Файлы "read.php" и "write.php" можно также переименовать. Дополнительно можно все три файла положить во вложенную папку на сайте и ограничить доступ к LOG-файлу (00000000.txt), чтобы его невозможно было просмотреть напрямую.



     
  CC  BY-NC-SA   © Dmitry Saltykov (ZXDemon)  [ «Creative Commons License» ]