Добрый день, уважаемые читатели моего скромного блога.
Совсем недавно я написал 2 статьи на тему мониторинга локальных устройств и внешних узлов для роутеров MikroTik на базе RouterOS и рассказал о схеме грамотного мониторинга: Микротик <=> Сервер. Сегодня речь пойдет о мониторинге домашнего интернета с вашего сервера VDS/VPS с оповещением по СМС. Для этого будем использовать PHP скрипт мониторинга.
Все, кто говорят что нельзя выполнять пинг через PHP скрипты – ошибаются, а если точнее – тут все зависит от того, где запускать скрипт. В данной статье скрипт написан на языке PHP и выполняет пинг вашего внешнего IP адреса домашнего интернета, разумеется, если там реально внешний IP, а также если у вас есть доступ до выполнения функции exec() на PHP.
Рассмотрим скрипт по частям:
$homeip = '0.0.0.0';
$downsms = 'Home+inet+is+DOWN+'.date('H:i:s');
$upsms = 'Home+inet+is+UP+'.date('H:i:s');
$checkdns = exec('ping -c 1 8.8.8.8');
Здесь мы указываем внешний IP домашнего интернета, а также объявляем шаблоны текстов СМС и указали Google DNS для проверки доступности интернета на сервере (мало ли что может случиться) и сразу же выполняем пинг.
PHP скрипт будет проверять наличие интернета дома только при наличии интернета на сервере, за что отвечает это условие:
if ($checkdns != '')
Далее:
$checkhome = exec('ping -c 1 '.$homeip);
if ($checkhome == '') {
if (!file_exists('homedown.txt')) {
file_put_contents('homedown.txt','');
file_get_contents('http://sms.ru/sms/send?api_id=YOUR_API_KEY&to=79012345678&text='.$downsms);
}
}
Здесь мы выполняем ping внешнего IP адреса вашего домашнего интернета и если пинг не проходит, создаем файл, по которому скрипт в дальнейшем просто будет понимать что в предыдущих его запусках интернета дома уже не было и не будет снова посылать СМС. Кстати вы можете изменить количество отправляемых пингом пакетов, я указал 1, потому что скрипт не очень быстро выполняется в браузере. Просто замените цифру 1 перед IP адресом.
Затем отправляется СМС на ваш номер телефона об отсутствии домашнего интернета. Для отправки СМС я использую сервис SMS.RU, поскольку он дает возможность использовать API и отправлять 5 бесплатных СМС в день на свой номер (который использовали при регистрации).
Для отправки SMS в тексте PHP скрипта вам нужно заменить YOUR_API_KEY на ваш API ключ из личного кабинета SMS.RU, а 79012345678 заменить на ваш номер телефона.
else {
if (file_exists('homedown.txt')) {
unlink('homedown.txt');
file_get_contents('http://sms.ru/sms/send?api_id=YOUR_API_KEY&to=79012345678&text='.$upsms);
}
}
В этой части кода если домашний интернет снова стал доступен, удаляется созданный файл и отправляется СМС. Что тут заменить для отправки СМС вы уже знаете.
Полный PHP скрипт мониторинга:
<?php
$homeip = '0.0.0.0';
$downsms = 'Home+inet+is+DOWN+'.date('H:i:s');
$upsms = 'Home+inet+is+UP+'.date('H:i:s');
$checkdns = exec('ping -c 1 8.8.8.8');
if ($checkdns != '') {
$checkhome = exec('ping -c 1 '.$homeip);
if ($checkhome == '') {
if (!file_exists('homedown.txt')) {
file_put_contents('homedown.txt','');
file_get_contents('http://sms.ru/sms/send?api_id=YOUR_API_KEY&to=79012345678&text='.$downsms);
}
}
else {
if (file_exists('homedown.txt')) {
unlink('homedown.txt');
file_get_contents('http://sms.ru/sms/send?api_id=YOUR_API_KEY&to=79012345678&text='.$upsms);
}
}
}
?>
Чуть не забыл – передача текста СМС с пробелами не поддерживается, поэтому в переменных $downsms
и $upsms
вместо пробелов пишите знак “+” как сделано в моем скрипте. При этом СМС на ваш телефон будет приходить с пробелами вместо знаков “+”.
PHP скрипт следует поставить в крон на выполнение каждую минуту или любой другой удобный вам промежуток времени.