Отправка e-mail/sms про появлении в сети определенного хоста

Обсуждение ПО и его настройки
Ответить
V palto
Сообщения: 47
Зарегистрирован: 12 дек 2014, 16:21

Приветствую!
Подскажите, как можно при регистрации клиента с определенным MAC в DHCP-сервере выполнять определенный скрипт? Допустим скрипт отправки сообщения на мыло или смс.
Может это можно делать и не через DHCP-сервер, я не знаю. Netwatch не катит, т.е. далеко не все клиентские хосты отвечают на пинги.

Если вкратце, то когда комп с маком 123 появился в сети, мне приходит мыло\sms с текстом "комп 123 онлайн". Соответственно, когда этот комп отконнектился, то пришло мыло\sms об уходе его в оффлайн.
Комп может быть как проводной,так и по wi-fi.


Аватара пользователя
podarok66
Модератор
Сообщения: 4355
Зарегистрирован: 11 фев 2012, 18:49
Откуда: МО

Даже и не соображу сразу, где искать :-) Можно попробовать просматривать таблицу ARP, в ее динамической части подсвечиваются подсоединенные компы.
Типа такого:

Код: Выделить всё

 {:local y [/ip arp find mac-address=XX:XX:XX:XX:XX:XX]; 
:if ( $y!="") do={:put [/ip arp get $y address]} else={put "fac"}}

позволит нам определить IP-адрес устройства, если его выдает дхпц-сервер. Затем можно пропинговать устройство по найденному адресу и, если оно отвечает, то высылаем письмо и включаем другой скрипт, который по нашему адресу пингует устройство через назначенные промежутки времени и отключаем этот скрипт. Как только ответа на пинги, нет высылает соответствующее письмо и включает первый скрипт и выключает второй... Ну это очень приближенно, в итоге все можно решить значительно изящнее, я уверен. Нужно только посидеть и подумать.
Не знаю, как долго хранится запись в динамической части ARP-таблицы, в это достаточно критично в данном варианте.


Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
V palto
Сообщения: 47
Зарегистрирован: 12 дек 2014, 16:21

Ок, покумекаю над предложенным вариантом. Спасибо. Только вот пигн не катит, я же писал уже.
У самого идеи аж три - dhcp - lease script, т.е. там же можно скрипт запускать при выдаче сервреом IP. Но вот как это в скрипте-то описать, что, мол, если такому-то маку выдан IP, то сделать то-то.
Второй вариант также был просмотр в ARP.
Третий - смотреть лог на предмет появления мака и строк assigned и deassigned. Подобного плана етсь примеры в инете, но там тонны кода + какое-то доп. логггирование в память.

Самый простой вариант, как мне видится - выполнение скрипта в dhcp lease, но вот какого скрипта?


V palto
Сообщения: 47
Зарегистрирован: 12 дек 2014, 16:21

Вот пока такой вариант работает:

Код: Выделить всё

:local y [/ip arp find mac-address=хх:хх:хх:хх:хх:хх];
:if ( $y!="") do={
                     :log warning "This comp online!";
                  } else {
                     :log warning "This comp offline!";
                   }


Вопрос такой - если это кинуть в шедулер и запускать раз в минуту, например, то каждую минуту будет сообщение - комп онлайн или комп оффлайн. Как сделать, чтобы проверялось каждую минуту, но сообщение в лог писалось только однажды - при первом появлении мака и при первом его пропадании? Так сделано в Netwatch.


Аватара пользователя
GDragon
Сообщения: 80
Зарегистрирован: 20 ноя 2014, 15:48

Добавить статическую переменную. Если комп онлайн - устанавливаем например 1
в скрипте проверяем переменную - если значения не совпадают - выполняем действие


V palto
Сообщения: 47
Зарегистрирован: 12 дек 2014, 16:21

А в коде это как выглядит? Примерчик можно?


V palto
Сообщения: 47
Зарегистрирован: 12 дек 2014, 16:21

Порылся в скриптах, вроде понял как сделать переменную:

Код: Выделить всё

:local Status 0;
:local y [/ip arp find mac-address=хх:хх:хх:хх:хх:хх];
:if ( $y!="") do={
                      :set Status 1; 
                  } else {
                     :set Status 0;
                   }
:if ($Status=1) do={
                     :log warning "This comp online!";
                      } else {
                     :log warning "This comp offline!";
                      }


Аватара пользователя
GDragon
Сообщения: 80
Зарегистрирован: 20 ноя 2014, 15:48

local - работает внутри скрипта, после отработки скрипта очищается
global - доступна всегда, в т.ч. между разными скриптами.


Аватара пользователя
podarok66
Модератор
Сообщения: 4355
Зарегистрирован: 11 фев 2012, 18:49
Откуда: МО

Да, поэтому переменную Status надо бы делать global, первой строкой выполнить проверку на наличие ее в системе вообще, в случае отсутствия присвоить ей какое-то значение и дальше по плану...
Как-то так мыслится издалека :-):


Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
V palto
Сообщения: 47
Зарегистрирован: 12 дек 2014, 16:21

Ну можно в коде ваши мысли и советы? Тяжело сочинять все это без знания языков программирования....


Ответить