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

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

Вы хотите, чтобы я думал за Вас? Нехорошее стремление, мне так не нравится... Я, конечно, при наличии свободного времени посижу и подумаю, но лучше бы Вам писать самому. Пусть с ошибками, пусть криво. Мы поправим и поможем, но это будет ваше!!! А содрать и забыть проще всего.


Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
Аватара пользователя
podarok66
Модератор
Сообщения: 4362
Зарегистрирован: 11 фев 2012, 18:49
Откуда: МО

Как бы если кривенько и на коленке, то в первом приближении это должно выглядеть так. Создаем два скрипта, для запуска каждого создаем шедулер. Назовем шедулеры IPwork и IPdreamВ каждом задаем периодичность запуска, на ваше усмотрение. Тело шедулера соответственно:

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

/system script run script1

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

/system script run script2

Тело скрипта заполняем тоже соответственно:

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

{
:local y [/ip arp find mac-address=хх:хх:хх:хх:хх:хх];
# Скрипт отработает, как только переменная примет какое-либо значение
:if ( $y!="") do={
                     :log warning "This comp online!";
                # скриптом отсылаем письмо (параметры почты вставить свои)
                /tool e-mail send from="..." to=... server=... port=587 user=... password=... start-tls=yes subject=("IP work") body=("This comp online! " . [/system clock get time] . " " . [/system clock get date]);
                # Ждем, когда письмо отправится
                :delay 30;
                # Включаем  шедулер для второго скрипта
                /system scheduler enable IPwork;
                # Выключаем шедулер для этого скрипта
                /system scheduler disable IPdream;
               
                  }
}   


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

{
:local y [/ip arp find mac-address=хх:хх:хх:хх:хх:хх];
# Скрипт отработает, как только переменная не будет иметь никакого значения
:if ( $y="") do={
                     :log warning "This comp offline!";
                # скриптом отсылаем письмо (параметры почты вставить свои)
                /tool e-mail send from="..." to=... server=... port=587 user=... password=... start-tls=yes subject=("IP wdream") body=("This comp offline! " . [/system clock get time] . " " . [/system clock get date]);
                # Ждем, когда письмо отправится
                :delay 30;
                # Включаем  шедулер для первого скрипта
                /system scheduler enable IPdream;
                # Выключаем шедулер для этого скрипта
                /system scheduler disable IPwork;
               
                  }
}             


При создании первый шедулер должен быть включен, а второй отключен. Комментарии я внес. Разбирайтесь, пробуйте другие варианты...
На работоспособность не проверял, повторяю, делал на коленке, из любопытства. Результаты проверки в студию, пжлст.


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

podarok66, спасибо, работает!

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

Я не знаю как процитированные строки реализовать в коде, а в ответ на просьбу о помощи вы сперва фыркаете, а потом выдаете код, совсем другой (да, простой, да рабочий, но другой), в нем нет global переменной и всего остального.

У меня вот есть такой вариант:

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

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


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


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

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

Как бы это уже в поддержку идей Дракона было сказано, а первоначальная мысль была в моем первом посте:
podarok66 писал(а): Затем можно пропинговать устройство по найденному адресу и, если оно отвечает, то высылаем письмо и включаем другой скрипт, который по нашему адресу пингует устройство через назначенные промежутки времени и отключаем этот скрипт. Как только ответа на пинги, нет высылает соответствующее письмо и включает первый скрипт и выключает второй... Ну это очень приближенно, в итоге все можно решить значительно изящнее, я уверен. Нужно только посидеть и подумать.

Я ее немного видоизменил, откинул пингование, ограничился запросами к таблице.
V palto писал(а):в ответ на просьбу о помощи вы сперва фыркаете, а потом выдаете код

Я не фыркаю, моё мнение всегда неизменно. Если ты что-то списал, то ты остался на прежнем уровне неуча, если написал самостоятельно, пусть с ошибками и дальнейшими правками с чьей-то помощью, ты поднялся на следующий уровень.
V palto писал(а):Я не знаю как процитированные строки реализовать в коде,

Вы что решили, что я знал, как это реализовывается в коде, пока не сел и не написал несколько вариантов?
V palto писал(а):выдаете код, совсем другой (да, простой, да рабочий, но другой), в нем нет global переменной и всего остального.

Количество вариантов далеко не один. Что было в данный момент ближе, то и написал...
Ваш вариант мне немного непонятен, ну это поправимо. Вам обязательно именно с глобальными переменными отработать? Я начал прикидывать, у меня условий выходит 4 или 5 уровней. Это потом если код станет неверно отрабатывать, столько логировать для наладки придется, что ой. Если очень нужно, давайте пишите, будем править тут по месту.


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

podarok66, из-за огромного количества амбиций, вероятно будет много проще и спокойнее, если вы будете просто модерировать.
От вас советов более не надо. Спасибо.

Другие форумчане в состоянии разрешить ситуацию для человека не желающего вникать в суть кодинга? Для меня.


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

V palto писал(а):Другие форумчане в состоянии разрешить ситуацию для человека не желающего вникать в суть кодинга? Для меня.

Не будет никто, никому не интересно :-):
V palto писал(а):podarok66, из-за огромного количества амбиций, вероятно будет много проще и спокойнее, если вы будете просто модерировать.
От вас советов более не надо. Спасибо.

Пожалуйста. Только модерация - не только подчистка грязи, но и проведение в жизнь политики ресурса. Помочь научиться - именно такова политика данного форума. Халявщики здесь плохо приживаются... Советовать более не стану, пусть будет по вашему.


Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
Аватара пользователя
GDragon
Сообщения: 80
Зарегистрирован: 20 ноя 2014, 15:48

Просто писать не :local а :global вот и всё.
Вообще у Микротика достаточно простой скриптовый язык. Проще самому разобраться чтобы не бегать за советом каждый раз :)


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

GDragon, я ж писал уже, что
V palto писал(а): Переменную StatusOld делал global - эффекта нет.


vqd
Модератор
Сообщения: 3605
Зарегистрирован: 26 сен 2013, 14:20
Откуда: НСК
Контактная информация:

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

/ip dhcp-server
add add-arp=yes address-pool=pool-HS disabled=no interface=Br-HS \
    [b]lease-script=OnUser[/b] lease-time=12h name=server1


Далее у меня

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

/system script
add name=OnUser policy=\
    ftp,reboot,read,write,policy,test,password,sniff,sensitive source=":local \
    mac \$leaseActMAC\r\
    \n/log warning \$mac\r\
    \n:if (![/ip dhcp-server lease get [find mac-address=\$mac] dynamic ]) do=\
    {\r\
    \n/ip hotspot ip-binding add type=bypassed mac-address=\$mac\r\
    \n} else={\r\
    \n:if ([:len [/ip hotspot ip-binding find mac-address=\$mac]] > 0) do={/ip\
    \_hotspot ip-binding remove [find mac-address=\$mac]}\r\
    \n}"


Соответственно вместо моего скрипта тупо отправляйте СМС либо почту


Есть интересная задача и бюджет? http://mikrotik.site
Аватара пользователя
podarok66
Модератор
Сообщения: 4362
Зарегистрирован: 11 фев 2012, 18:49
Откуда: МО

В скрипте предпоследняя строка не понял нижнее подчеркивание перед hotspot, закралась очепятка или какая-то хитрость?


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