Настраиваем уведомление о подключении нового устройства к локальной сети или WiFi, используя настройки DHCP сервера (выделение IP адреса или истечение аренды). Отправляем сообщение в Telegram или электронную почту.
Мой Wi-Fi роутер сказал, что мужчина был дома с моей женой, пока я был на работе
LickingWoundSalt (Reddit)
Но это не единственное применение этой возможности. 🙂
Если выставить время аренды IP адреса (Lease Time) равным 10 часов можно узнать во сколько подключились к сети компьютеры сотрудников или кто не выключает компьютер уходя с рабочего места.
Если использовать простой пароль для WiFi можно обнаружить, что соседский ребенок тоже использует ваш WiFi. 🙂
Скрипт поможет узнать о имеющихся проблемах со стабильностью связи или о сетевых неполадках.
Так же можно на основе этого скрипта выполнить другие полезные действия.
Статья на других языках:
?? — MikroTik Scripts: Notification of device connection to the network
?? — MikroTik Scripts: Notificación de la conexión del dispositivo a la red
?? — Scripts MikroTik: notification de la connexion de l’appareil au réseau
?? — MikroTik-Scripts: Benachrichtigung über die Geräteverbindung zum Netzwerk
?? — MikroTik-scripts: Melding van apparaat verbinding met het netwerk
Скрипт: Отправка уведомления о подключении устройства к сети
MikroTik скрипт срабатывает при выделении IP адреса новому устройству или устройству срок аренды IP адреса которого истек. Отправляет сообщение в Telegram или электронное письмо.
Сообщение содержит:
- имя устройства (имя компьютера или назначенное производителем);
- комментарий (если устройству назначен статический адрес с указанным комментарием)
- имя DHCP интерфейса;
- IP и MAC адрес подключаемого устройства.
? Рекомендую в комментариях к устройствам использовать только символы английского языка!
Скрипт использует вызов функций:
- MikroTik: Отправка сообщения в Telegram (функция);
- MikroTik: Отправить письмо и файл на почту (функция).
Изменить время аренды IP адреса
Устанавливаем время аренды IP адреса = 10 часов.
[IP] -> [DHCP Server] -> [Your DHCP server] -> [General: Lease Time=10:00:00]
Создать скрипт уведомления
[IP] -> [DHCP Server] -> [Script]
Код скрипта
:if ($leaseBound =1) do={
# Variables
:local Time [/system clock get time];
:local Date [/system clock get date];
:local Comment [/ip dhcp-server lease get value-name=comment number=[/ip dhcp-server lease find address=$leaseActIP]]
:local DeviceName [/system identity get name];
# START Send Telegram Module
:local MessageText "\F0\9F\9F\A2 <b>$DeviceName: New DHCP client</b> %0D%0A <b>Name:</b> $"lease-hostname" %0D%0A <b>Comment:</b> [$Comment] %0D%0A <b>Interface:</b> $leaseServerName %0D%0A <b>IP:</b> $leaseActIP %0D%0A <b>MAC:</b> $leaseActMAC";
:local SendTelegramMessage [:parse [/system script get MyTGBotSendMessage source]];
$SendTelegramMessage MessageText=$MessageText;
#END Send Telegram Module
# START Send Email Module
:local SendTo "notify@mhelp.pro";
:local Subject "\F0\9F\9F\A2 INFO: $DeviceName [$Date $Time] New DHCP client";
:local MessageText "Name: $"lease-hostname", Comment: $Comment, Interface: $leaseServerName IP: $leaseActIP MAC: $leaseActMAC";
:local FileName "";
:local SendEmail [:parse [/system script get SendEmailFunction source]];
$SendEmail SendTo=$SendTo TextMail=$MessageText Subject=$Subject FileName=$FileName;
# END Send Email Module
}
? В этой статье обсуждалось создание скрипта MikroTik для отправки сообщений о подключении устройства к сети. Я надеюсь у вас получилось настроить отправку уведомлений в Telegram или на электронную почту. Однако, если вы столкнулись с каким-то проблемами при получении информации, не стесняйтесь написать в комментариях. Я постараюсь помочь.
P.S. Если у вас есть интересные или необычные вариант применения скрипта, напишите в комментариях, я добавлю в статью. 🙂
Подскажите как доработать скрипт, так чтобы он сравнивал с заготовленным списком типа user + mac и давал ответ о вхождении в список. Я попытался сделать так:
# Список пользователей и их MAC-адресов
:local userMACs {
"user1"="00:11:22:33:44:55";
"user2"="66:77:88:99:AA:BB"
}
# Функция для получения имени пользователя по MAC-адресу
:local getUserNameByMAC do={
:local macAddress \$1
:foreach user, mac in=$userMACs do={
:if ($macAddress = $mac) do={
return $user
}
}
return ""
}
# Основной скрипт
:local macAddress [/ip dhcp-server lease get [find where active-address=$leaseActIP] mac-address]
:local userName [$getUserNameByMAC $macAddress]
:if ($userName != "") do={
:log info ("Авторизация успешна для пользователя " . $userName . " с MAC-адресом " . $macAddress)
} else={
:log warning ("MAC-адрес " . $macAddress . " не сопоставлен ни с одним пользователем")
}
Здравствуйте! А нету подобного, только для капсмана?
Чтобы при подключении клиента, комментарий брался из аксесс листа и отправлялся в телегу.
Всем привет! хочу поделиться кодом который работает у меня, так как все взято именно от сюда и спасибо огромное автору за публикацию и поднятую тему. Также благодарность всем участникам.
Может кому поможет и мой опыт. Комменты отправляются как при коннекте так и при дисконнекте клиента DHCP, для меня это было важно. для наглядности, коннект-зеленый круг, дисконнект-красный круг, ну и дата со временем событий тоже присутствует.
Работает у меня (на ROS 7.13) только с такой вариацией строк кода. И да, лиза у DHCP 10 мин. Для моих задач это выглядит так.
:if ($leaseBound =1) do={
:local Time [/system clock get time];
:local Date [/system clock get date];
:local Comment [/ip dhcp-server lease get value-name=comment number=[/ip dhcp-server lease find address=$leaseActIP]]
:local DeviceName [/system identity get name];
:local MessageText "\F0\9F\9F\A2 $DeviceName: New DHCP client %0D%0A Date: [$Date] Time: [$Time] %0D%0AName: $"lease-hostname" %0D%0A Comment: [$Comment] %0D%0A Interface: $leaseServerName %0D%0A IP: $leaseActIP %0D%0A MAC: $leaseActMAC";
:local SendTelegramMessage [:parse [/system script get MyTGBotSendMessage source]];
$SendTelegramMessage MessageText=$MessageText;
} else={
:local Time [/system clock get time];
:local Date [/system clock get date];
:local Comment [/ip dhcp-server lease get value-name=comment number=[/ip dhcp-server lease find address=$leaseActIP]]
:local DeviceName [/system identity get name];
:local MessageText "\F0\9F\94\B4 $DeviceName: Disconnect DHCP client %0D%0A Date: [$Date] Time: [$Time] %0D%0AName: $"lease-hostname" %0D%0A Comment: [$Comment] %0D%0A Interface: $leaseServerName %0D%0A IP: $leaseActIP %0D%0A MAC: $leaseActMAC";
:local SendTelegramMessage [:parse [/system script get MyTGBotSendMessage source]];
$SendTelegramMessage MessageText=$MessageText;
}
Спасибо Владимир, за то что поделились знаниями.
Очень классный скрипт, спасибо.
Правда не работает с устройствами Apple, даже если МАС не меняется. Пока не придумал как победить
Вау! Это прям то что я искала и ломала голову как сделать. Спасибо большое что делитесь такой полезной информацией!
Мне кстати стало интересно, у меня дома в качестве сервера стоит Thinkpad x230 tablet, в который вставлены симка (в заводской слот) и карточка sierra wireless mc8355 gobi3000 в родной mini pci-e слот. Т.е. Мобильная связь там можно сказать нативная. Реально ли как-то сделать чтобы вывод этого скрипта с микротика обращался к локальном серверу (т.е. ноуту) и триггерил какой-нибудь скрипт для отправки смс?
Сам разобрался с проблемой, в версии 7.6 надо заменить :local UseTLS «starttls»; и tls=$UseTLS
Вы молодец!
Все работало нормально, но после обновления прошивки до 7.6 оповещение о новых подключенных перестали приходить. Просто email вручную с микрота отправляются, никакие настройки не менялись.
Может кто сталкивался с похожей проблемой?
Подскажите, как отправить сообщение при покидании клинетом wi-fi сети? Секция кода else от Павла М. срабатывает вместе с
секцией if. И приходит просто два сообщения при подключении клиента к точке доступа. В настройках dhcp время лизы установлено 10мин.
} else={
:local DeviceName [/system identity get name];
# START Send Telegram Module when disconnect device
:local MessageText "\F0\9F\9F\A2 $DeviceName: Disconnect DHCP client %0D%0A Name: $"lease-hostname" %0D%0A Interface: $leaseServerName %0D%0A IP: $leaseActIP %0D%0A MAC: $leaseActMAC";
:local SendTelegramMessage [:parse [/system script get MyTGBotSendMessage source]];
$SendTelegramMessage MessageText=$MessageText;
#END Send Telegram Module when disconnect device
}
Ребята, подскажите а как в Comment: [] вставить (вывести) Active Host Name?
Вот пример моего сообщения, ну очень не хватает знать Active Host Name и еще бы уровень сигнала из CAPsMAN
? MikroTikMainSouz: New DHCP client
Name: MEIZU-M6-Note
Comment: []
Interface: main-dhcp
IP: 192.168.88.18
MAC: 02:5F:67:C4:0E:EE
Павел М.
27 декабря, 2020 в 18:02
Всё решил, причём намного проще чем думал изначально: воспользовался тем, что DHCP-сервер всегда отслеживает не только подключение нового клиента но и отключение подключенного, таким образом скрипт просто дополняется новой веткой…
Павел, вы ошибаетесь! $leaseBound = 0 — это не отключение подключенного клиента, а окончание срока аренды IP-адреса.
Добрый день. Подскажите пожалуйста, как можно реализовать уведомления ТОЛЬКО для динамических адресов?
:if ($leaseBound = 1 && [/ip dhcp-server lease get [find address=$leaseActIP] dynamic ]=true) do={
:local Time [/system clock get time];
:local Date [/system clock get date];
:local Comment [/ip dhcp-server lease get value-name=comment number=[/ip dhcp-server lease find address=$leaseActIP]]
:local DeviceName [/system identity get name];
/tool fetch "https://api.telegram.org/bot5XXXXXXXXXXXXXXXXXXX/sendMessage?chat_id=-100XXXXXXXXXX6&text=\F0\9F\9F\A2 $DeviceName: %D0%9D%D0%BE%D0%B2%D0%BE%D0%B5+DHCP+%D1%83%D1%81%D1%82%D1%80%D0%BE%D0%B9%D1%81%D1%82%D0%B2%D0%BE+%D0%B2+%D1%81%D0%B5%D1%82%D0%B8%3A $"lease-hostname" [$Comment]+IP: $leaseActIP+MAC: $leaseActMAC"
}
Настроил по инструкции, но при подключении устройств — ничего не приходит. Что-то надо поменять? Последняя версия прошивки — RouterOS v6.48.1 (stable).
p.s. если в ручном режиме запускаю этот скрипт — ничего в телегу не приходит, а если выполняю ручной запуск скрипта SendMessageToTelegram — приходит: «? MyName: italic inline fixed-width code plain text More Scripts (https://mhelp.pro/)».
Проверяйте правильность отправки текста сообщения, проблема скорей всего в этом, а не в данном скрипте.
По статье «Отправка сообщения в Телеграм (функция)».
Добейтесь чтобы отправка сообщения проходила успешно (проверяйте наличие спец символов или символов русского языка в тексте сообщения).
Проблему решил. Просто не в тот раздел скриптов размещал )) Спасибо!
Пожалуйста Дмитрий, большое спасибо, что написали отзыв о решении проблемы.
Как сделать чтобы уведомления приходили только о тех устройствах в которых в комментариях отсутствует некий общий текст, например если в комментарии присутствует слово «Sss» то уведомления не должны приходить?
Уважаемый автор, ещё раз спасибо за скрипт, всё работает отлично, но столкнулся с одной неприятной особенностью некоторых Apple-устройств: отчего-то они почти непрерывно подключаются и тут же самостоятельно отключаются от DHCP-сервера, в результате в лог попадает много ненужных уведомлений, в связи с этим вопрос: как изменить скрипт чтобы этого избежать? Самым простым вижу способ просто отключить уведомления о подключении/отключении по имени устройства или его MAC-адресу, но тогда об этом устройстве не будет вообще никогда информации в уведомлениях, это не совсем устраивает. Нет ли ещё каких вариантов — чтобы отслеживались ситуации с отключением/подключением одного и того же устройства в пределах 1-2 минут и они не попадали в лог, а попадали именно такие, которые не имели бы обратно-парных? Как для этого можно модернизировать скрипт?
Спасибо за отзыв.
1. С Apple устройствами проблема, у них стандартное поведение — это изменение MAC адреса в WiFi сети, для «обезличивания». Так же как частое включение/отключение (это может быть работа режима энергосбережения), после чего устройство заходит в сеть с новым MAC адресом;
2. По поводу доработки, нужно подумать, но маловероятно что это будет простая доработка. Как быстрое решение видится создание этим скриптом списка подключаемых устройств (с перезаписью дублей). Список будет забирать другой скрипт и при этом очищать этот список.
Отличная статья, спасибо!!! А как можно добавить функцию отслеживания и уведомления при отключении устройства?
Здравствуйте, спасибо. Придется немного переделать скрипт Уведомление о входе — ссылка. При отключении от WiFi в логе MikroTik генерируется сообщение вида: «2C:59:8A:71:20:78@wlan2-5GHz: disconnected, received disassoc: sending station leaving (8)».
В указанном скрипте изменить строку поиска определенного события на :local IDsEventsAccount [/log find where message ~ «station leaving»]; или какой-то свой признак из журнала устройства.
Всё решил, причём намного проще чем думал изначально: воспользовался тем, что DHCP-сервер всегда отслеживает не только подключение нового клиента но и отключение подключенного, таким образом скрипт просто дополняется новой веткой:
:if ($leaseBound =1) do={
# Variables
:local Time [/system clock get time];
:local Date [/system clock get date];
:local Comment [/ip dhcp-server lease get value-name=comment number=[/ip dhcp-server lease find address=$leaseActIP]]
:local DeviceName [/system identity get name];
# START Send Telegram Module when connect new device
:local MessageText "\F0\9F\9F\A2 $DeviceName: Connect new DHCP client %0D%0A Name: $"lease-hostname" %0D%0A Comment: [$Comment] %0D%0A Interface: $leaseServerName %0D%0A IP: $leaseActIP %0D%0A MAC: $leaseActMAC";
:local SendTelegramMessage [:parse [/system script get MyTGBotSendMessage source]];
$SendTelegramMessage MessageText=$MessageText;
#END Send Telegram Module when connect new device
} else={
:local DeviceName [/system identity get name];
# START Send Telegram Module when disconnect device
:local MessageText "\F0\9F\9F\A2 $DeviceName: Disconnect DHCP client %0D%0A Name: $"lease-hostname" %0D%0A Interface: $leaseServerName %0D%0A IP: $leaseActIP %0D%0A MAC: $leaseActMAC";
:local SendTelegramMessage [:parse [/system script get MyTGBotSendMessage source]];
$SendTelegramMessage MessageText=$MessageText;
#END Send Telegram Module when disconnect device
}
Всё почти точно такое же как и при подключении — только убрал выдачу комментария при отключении клиента — всё равно он приходил пустым несмотря на заранее заданный комментарий — при подключении клиента он как раз отображался, а вот при отключении — нет, интересно почему так?
Думаю, можно поместить этот скрипт в основную статью, переделав её и сразу назвав как «скрипт для уведомления о подключении и отключении устройства к сети» — так будет легче найти и сразу же использовать тем кто в этом нуждается.
У меня же остался вопрос о том как можно менять цвет и тип пиктограммы первого символа при выдаче сообщения: зелёная жирная точка это хорошо, а как подставлять иные варианты и где можно их все увидеть? Понятно что сейчас это задано вот этими символами \F0\9F\9F\A2, но где можно узнать как именно они кодируют?
Вы молодец.
1. Статья задумывалась в упрощенном виде, чтобы новичкам было легче войти в тему скриптов. Поэтому нет многофункциональных скриптов и разного рода «оптимизаций» и сокращений кода. Т.е. посмотрели что легко, сделали. Понравилось, начали оптимизировать, благо знания уже есть.
О варианте уведомлений при отключении клиентов, насколько ценная информация, что 30 сетевых устройств были выключены по завершению рабочего дня?
2. Зеленая точка — это emoji. MikroTik не поддерживает прямую вставку эмодзи, поэтому записываем её кодом. Найти HEX коды эмодзи, можно по запросу «emoji utf-8 web», например ? это
\xF0\x9F\x98\x81
, что для MikroTik запишется как \F0\9F\98\81. Использование эмодзи в заголовке уведомления очень информативно.3. Вы можете вынести эти строки вниз скрипта, исключив их из условий:
:local SendTelegramMessage [:parse [/system script get MyTGBotSendMessage source]];
$SendTelegramMessage MessageText=$MessageText;
Это уменьшит код (избыточность) еще на две строки, т.к. в вашем варианте в любом случае происходит отправка сообщения, а в условиях оставить только генерацию сообщения.
1. Честно признаюсь, необходимость отслеживания точного времени отключения устройств возникла не просто так, а в связи с желанием дистанционного контроля ребёнка (почти уже взрослого), живущего самостоятельно — хотелось ненавязчиво понять график прихода/ухода на учёбу, режим работы ПК — теперь всё это будет попадать в чат и можно будет просмотреть и получить исчерпывающие ответы на свои вопросы.
2. Спасибо за пояснение, пока ждал уже и сам нашёл ответ где искать эти эмодзи, правда пока не нашёл их все в одном месте сразу.
3. Логично, и правда отправка сообщения произойдёт и так и этак, сейчас переделаю и проверю работоспособность.
Ещё раз спасибо и хотелось бы побольше статей про автоматизацию работы с Mikrotik и его настройку, использование разных полезных скриптов. К примеру, на некоторых скриншотах видна имеющаяся настройка CAPsMAN — а статьи про неё нет, можно добавить?
1. Да, для домашнего варианта будет хорошо.
2. Я смотрю здесь, и ищу запрос в гугле вида «⚠️ utf8 hex». Кстати, возможен вариант, что эмодзи может некорректно отображаться на устройстве определенного вендора (особенно какие-то новые символы).
3. Статьи пишутся, но времени не хватает. Про CAPsMAN планы есть, но очень отдаленные.
Для себя собрал такой скрипт. Были проблемы с lease-hostname — нужны еще двойные кавычки, поэтому сделал так.
Работает на версии 6.48.5
:global Message
:if ($leaseBound =1) do={
:local Hname $"lease-hostname";
:set Message "\F0\9F\86\99 New client%0D%0A $leaseActIP [$Hname]%0D%0A MAC: $leaseActMAC ";
} else={
:local Hname $"lease-hostname";
:set Message "\F0\9F\93\B4 Disconnect %0D%0A[$Hname] ";
}
:local SendTelegramMessage [:parse [/system script get MyTGBotSendMessage source]];
$SendTelegramMessage MessageText=$Message;
Добрый день.
Ваш скрипт оказался самым интересным и очень подходящим мне, хотел только уточнить одну вещь.
Сам я не умею писать сприпты, только могу примерно понять о чем идёт речь, прочитать так сказать немного. Вопрос у меня такого характера, есть 2 устройства, спамять раз в 10 минут, то поключаться то отключаться, как сделать так, что бы исключить их маки, что в ваш скрипт надо дописать и главное куда? Спасибо заранее за ответ
В телеграме получаю:
? MikroTik: New DHCP client
Name: MiNote10Lite-MiNote1
Comment: []
Interface: server1
IP: 192.168.0.241
MAC: AE:1D:16:73:4A:AD]
—-
Что должно выводиться в «Comment», у меня там пустой массив?
В конце MAC адреса лишняя закрывающаяся квадратная скобка
1. Comment это комментарий к устройствам со статическими IP адресами (в таблице [IP] -> [DHCP Server] -> [Leases]), у вас клиент MiNote10Lite-MiNote1 либо имеет динамический IP, либо, если ему назначен статический IP адрес, поле комментарий не заполнено;
2. Спасибо, опечатка, исправлю.