вторник, 19 января 2016 г.

Следим за начальством: оповещение при регистрации в сети.

  Обычный офис, есть штат сисадминов, есть начальство, которое ходит на работу, как мы все знаем, не по графику. Было бы довольно неплохо сисадмину знать, когда начальство в офисе, а когда нет. 
  Задача стояла следующая: когда начальник приходит в офис - оповещать сисадмина об этом знаменательном событии =). Так как сейчас все повсеместно пользуются смарфонами, то при появлении на работе начальника - его смартфон автоматически регистрируется в Wi-Fi сети предприятия (конечно, если у него он всегда включен). Это был как раз наш случай. Значит по этому событию мы можем сделать оповещение!
  Для этого создаем скрипт:
# вводим локальную переменную с MAC-адресом смартфона начальника
:local MAC CC:CC:CC:CC:CC:CC;
# вычисляем время, и отбираем значение "час"
:local time [/system clock get time];
:local hour [: pick [/system clock get time] 0 2];
# если время с 9 до 18 (время работы админов), ищем в регистрационном листе Wi-Fi наш MAC.
:if ($hour >= 9 and $hour <= 18)  do={:local MACdetect [interface wireless registration-table find mac-address=$MAC];
# если переменная MACdetect записалась, и она больше нуля (MAC-адрес найден), то пытаемся записать в переменную nameADR имя адрес-листа с IP 123.123.123.123, если записать не можем-значит адрес-листа не существует, значит регистрация произошла впервые за день, значит создаем адрес-лист с именем timer и IP 123.123.123.123 на 8 часов.  Это таймер, я его описывал в статье тут. Мы его используем для того, что-бы отловить ТОЛЬКО первую регистрацию устройства за день. Потом будет таймаут на 8 часов до следующего дня.
:if ([:len $MACdetect]>0) do {:do {:local nameADR [/ip firewall address-list get value-name=list [find address=123.123.123.123]]} on-error={/ip firewall address-list add dynamic=yes address=123.123.123.123 list=timer timeout=08:00:00; 
# играем на beeper микротик "Имперский Марш" с Звездных войн. оповещая что начальство в офисе(или под офисом, т.к. дальность Wi-Fi добивает до стоянки)
:beep frequency=500 length=500ms;
:delay 500ms;
:beep frequency=500 length=500ms;
:delay 500ms;
:beep frequency=500 length=500ms;
:delay 500ms;
:beep frequency=400 length=500ms;
:delay 400ms;
:beep frequency=600 length=200ms;
:delay 100ms;
:beep frequency=500 length=500ms;
:delay 500ms;
:beep frequency=400 length=500ms;
:delay 400ms;
:beep frequency=600 length=200ms;
:delay 100ms;
:beep frequency=500 length=500ms;
:delay 1000ms;


:beep frequency=750 length=500ms;
:delay 500ms;
:beep frequency=750 length=500ms;
:delay 500ms;
:beep frequency=750 length=500ms;
:delay 500ms;
:beep frequency=810 length=500ms;
:delay 400ms;
:beep frequency=600 length=200ms;
:delay 100ms;
:beep frequency=470 length=500ms;
:delay 500ms;
:beep frequency=400 length=500ms;
:delay 400ms;
:beep frequency=600 length=200ms;
:delay 100ms;
:beep frequency=500 length=500ms;
:delay 1000ms;}}}
  Вместо оповещение через beeper можно сделать любое другое: по e-mail, по sms и т.д.

  Полностью скрипт выглядит так:
:local MAC CC:CC:CC:CC:CC:CC;
:local time [/system clock get time];
:local hour [: pick [/system clock get time] 0 2];
:if ($hour >= 9 and $hour <= 18)  do={:local MACdetect [interface wireless registration-table find mac-address=$MAC];
:if ([:len $MACdetect]>0) do {:do {:local nameADR [/ip firewall address-list get value-name=list [find address=123.123.123.123]]} on-error={/ip firewall address-list add dynamic=yes address=123.123.123.123 list=timer timeout=08:00:00; :beep frequency=500 length=500ms;
:delay 500ms;
:beep frequency=500 length=500ms;
:delay 500ms;
:beep frequency=500 length=500ms;
:delay 500ms;
:beep frequency=400 length=500ms;
:delay 400ms;
:beep frequency=600 length=200ms;
:delay 100ms;
:beep frequency=500 length=500ms;
:delay 500ms;
:beep frequency=400 length=500ms;
:delay 400ms;
:beep frequency=600 length=200ms;
:delay 100ms;
:beep frequency=500 length=500ms;
:delay 1000ms;


:beep frequency=750 length=500ms;
:delay 500ms;
:beep frequency=750 length=500ms;
:delay 500ms;
:beep frequency=750 length=500ms;
:delay 500ms;
:beep frequency=810 length=500ms;
:delay 400ms;
:beep frequency=600 length=200ms;
:delay 100ms;
:beep frequency=470 length=500ms;
:delay 500ms;
:beep frequency=400 length=500ms;
:delay 400ms;
:beep frequency=600 length=200ms;
:delay 100ms;
:beep frequency=500 length=500ms;
:delay 1000ms;}}} 
  Скрипт  помещаем в Scheduler на отработку каждые 30 секунд. Данный метод можно применять для отслеживания подключения ноутбука или компьютера по wifi. Для отслеживания включения компьютера по проводу в ROS есть уже встроенный функционал.  

Подписаться на новые статьи.

8 комментариев:

  1. Приведите пожалуйста пример скрипта с отправкой email. Никак не получается сделать.

    ОтветитьУдалить
    Ответы
    1. получилось модифицировать? пишите через обратную связь - помогу.

      Удалить
  2. Идея прикольная, вот только как бы изменить так что бы он за несколькими MAC-адресами следил.

    ОтветитьУдалить
  3. Спасибо за идею.
    Сделал у себя аналог. Но отправляю сообщение в Telegram.

    ОтветитьУдалить
    Ответы
    1. Можно поделиться скриптом?

      Удалить
    2. Можно поделиться скриптом? Vv.pylypiuk@gmail.com

      Удалить
    3. поделитесь и сюда, пожалуйста
      gwk@inbox.ru

      Удалить
  4. бипер далеко не услышать, а вот как сделать сообщение в скайп?

    ОтветитьУдалить