Скрипт

Обсуждение ПО и его настройки
Ответить
prompt
Сообщения: 23
Зарегистрирован: 06 мар 2019, 17:17

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

Спасибо предварительно.


Globalist
Сообщения: 6
Зарегистрирован: 11 апр 2023, 18:39

Вам сначала нужно smtp настроить на микроте:
/tool e-mail
set address=smtp.example.com from=myemail@example.com password=пароль port=587 or 25 start-tls=yes user=myemail@example.com
Сам скрипт
:local emailTo "youmail@example.com"
:local subject "Обнаружен новый MAC-адрес"

# Здесь храним увиденные MAC-адреса
:local knownMacs;

# Можно загрузить ранее известные мак адреса из файла
:if ([/file find name="known-macs.txt"] != "") do={
:set knownMacs [/file get [find name="known-macs.txt"] contents]
} else {
:set knownMacs ""
}

# Проверяем список арп
:foreach i in=[/ip arp find where dynamic=yes] do={
:local currentMac [/ip arp get $i mac-address]

# Проверяем, есть ли MAC в известном списке
:if ([:find $knownMacs $currentMac] = -1) do={
# Отправляем email
/tool e-mail send to=$emailTo subject=$subject body=("Обнаружен новый MAC-адрес: " . $currentMac)

# Добавляем MAC в известный список
:set knownMacs ($knownMacs . "," . $currentMac)
}
}

# Сохраняем известные MAC-адреса в файл
/file set [find name="known-macs.txt"] contents=$knownMacs
И все это в планировщик добавить:
/system scheduler
add interval=5m name=CheckNewMACs on-event=имяВашегоСкрипта start-date=nov/01/2023 start-time=00:00:00


prompt
Сообщения: 23
Зарегистрирован: 06 мар 2019, 17:17

Спасибо за бьiстрая реакция, а где точно надо ставит мак?
Идея в том, что мой мениджер очень много ездит и не всегда могу его найти в офисе - если его мак в сети значит можно говорить с ним ...

П.С.
А если надо следит за болше мак адреса?


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

Всё это интересно и хорошо, но логичнее всего использовать всё же логи ( тавтология случайна). Если для одного МАС-адреса в случае подключения через WiFi, поиск нужного будет выглядеть примерно так:

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

{
:global lastTime;
:global curMsg [ :toarray [ /log find message~"00:8E:05:00:94:7B@Mikrotik:"  ] ];
:global curArCnt [ :len $curMsg ] ;
:global curTime [ :totime [/log get [ :pick $curMsg ($curArCnt -1) ] time   ] ];
:global Msg "";
:if ( $curArCnt != 0 ) do={
:if ( $lastTime = "" ) do={
    :set lastTime $curTime ;
    :set Msg [/log get [ :pick $curMsg ($curArCnt-1) ] message];
    :put "$lastTime $Msg";
} else={
    :if ( $lastTime < $curTime ) do={
        :set lastTime $curTime ;
        :set Msg [/log get [ :pick $curMsg ($curArCnt-1) ] message];
        :put "$lastTime $Msg";
    }
}
}
}
В этом коде :put "$lastTime $Msg"; заменяем put на нужный нам способ отправки. Кусок "00:8E:05:00:94:7B@Mikrotik:" тоже смотрим, как у вас в логах выглядит.
Если для целого списка, надо цикл запускать. Но там всё как обычно, никаких особых проблем я не вижу.
Всё написанное работает на 6 версии. О версии 7 не могу сказать, я там не проверял. А вообще я это восемь лет назад писал, может что и поменялось с тех пор)))
Конечно, при любом раскладе скрипт нужно пилить под конкретные условия. Но это явно уже может быть сделано только самим ТС.


Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
prompt
Сообщения: 23
Зарегистрирован: 06 мар 2019, 17:17

Уважаемьi, а нельзя по подробнее ...:
:put "$lastTime $Msg"; - здесь надо поставит примерно :

::local Eaccount "mikrotik@xxx.xxx";
:local pass "xxxxxxx";


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

Да что там подробнее? Я делал ради любопытства, и команда :put - это для отладки. На ее место встраиваем конструкцию, ответственную за отправку мессаги удобным вам способом ( логирование, Телеграм, почта, сервис SMS, API для какой-то связки, ещё какие-либо извороты). Часто используют одновременно несколько способов, чтобы как-то резервировать и получить месседж гарантированно. Это достаточно обширная область, я не преследовал идею создать конечный скрипт. Повторюсь, это был акт чистого любопытства. Сделал и забыл.


Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
Ответить