PHP скрипт мониторинга домашнего интернета с оповещением

PHP скрипт мониторинга

Добрый день, уважаемые читатели моего скромного блога.

Совсем недавно я написал 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 скрипт следует поставить в крон на выполнение каждую минуту или любой другой удобный вам промежуток времени.