скрипт состоит из 3х файлов
оптимизировать пока нет времени.
позже зделаю friendly скрипт
запускается по крону:
*/2 * * * * /usr/local/bin/php -q /root/scripts/ping_.php >> /ping.html /dev/null 2>&1
помимо отправки почты сохраняет еще в логи: /ping.html
ping_.php
Код:
<?php
require_once("mailer.php");
$data = "<br><table border=\"1\" cellpadding=\"0\" cellspacing=\"2\"><tr>
<td colspan=\"3\" align=\"center\"><b>".date("Y-m-d H:i:s")."</b></td></tr><tr><td><b>Host</b></td><td><b>Before</b></td><td><b>After</b></td></tr>";
// эти ипы мы будем опрашивать, и если ни один не пингуется - то выполнить команду clean fdb all и отправить уведомление на почту
$hosts = array(
1 => "192.168.126.12",
2 => "192.168.5.11",
3 => "192.168.126.102",
4 => "192.168.126.14",
5 => "91.203.62.109");
$GLOBALS['send'] = 0;
for($i = 1; $i <= count($hosts); $i++)
{
exec("/sbin/ping -c 5 -i 0.2 {$hosts[$i]}", $out, $results);
if($results == 0)
{
$out = "";
$data .= "<tr><td>{$hosts[$i]}</td><td>OK</td><td>-</td></tr>";
}
else
{
$data .= "<tr><td><b>{$hosts[$i]}</b></td><td><b>NO</b></td>";
// очистить таблицу маков
exec("/usr/local/bin/expect /root/scripts/clear_fdb");
// подождать 3 сек и пропинговать снова хосты и сгенерировать отчет
sleep(3);
exec("/sbin/ping -c 5 -i 0.2 {$hosts[$i]}", $out_, $results_);
if($results_ == 0)
{
$data .= "<td><b>OK</b></td></tr>";
$GLOBALS['send'] = 1;
}
else
{
$data .= "<td><b>NO</b></td></tr>";
$GLOBALS['send'] = 1;
}
}
}
echo $data .= "</table>";
if($GLOBALS['send'] == 1) mailers($data);
и исходник файла
/root/scripts/clear_fdbпримечание: хост
192.168.126.105 замените на свой
send "
admin\r" логин на свитч
send "
pass_pass\r" пароль на свитч
Код:
#!/usr/bin/expect
spawn telnet 192.168.126.105
expect "UserName"
send "admin\r"
expect "Password"
send "pass_pass\r"
expect "HomeNET Core"
send "clear fdb all\r"
expect "HomeNET Core"
send "logout\r"
expect eof
exit
mailer.php примечание: замените хост
127.0.0.1 и порт
25 если они отличаются от ваших
base64('
login') и base64('
password') замените на ваш логин и пароль в почтовом сервере, от которого происходит отправка
you@mail.com - замените на ваше мыло
Код:
function sock_mail($to, $from, $subj, $message)
{
$fp = fsockopen("127.0.0.1", 25, $errno, $errstr, 30);
fputs($fp, "HELO\r\n");
fputs($fp, "AUTH LOGIN\r\n");
fputs($fp, base64('login')."\r\n");
fputs($fp, base64('password')."\r\n");
fputs($fp, "MAIL FROM:<$from>\r\n");
fputs($fp, "RCPT TO:<$to>\r\n");
fputs($fp, "DATA\r\n");
fputs($fp, "Content-Type: text/html; charset=windows-1251\r\n");
fputs($fp, "From: $from\r\n");
fputs($fp, "to: $to\r\n");
fputs($fp, "Subject: $subj\r\n");
fputs($fp, "\r\n");
fputs($fp, $message."\r\n");
fputs($fp, ".\r\n");
fputs($fp, "QUIT\r\n");
sleep(1);
fclose($fp);
}
function mailers($text)
{
sock_mail("you@mail.com", "you@mail.com", "Clear FDB", $text);
}
прочитать про Expect:
http://ru.wikipedia.org/wiki/Expectавтор: stas5 (кыця) hnet.dp.ua
под наблюдением: djeklu (кыця) gmail.com