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

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

Добрался до этого вопроса... Лето, далеко от железок...
Итак, я выяснил и проверил, что в lease-script можно указать имя скрипта, который будет выполнятся при выдаче клиенту IP-адреса и при истечении этой аренды (assigned и deassigned).
Также проверил, что в lease-script можно писать тело скрипта и он также будет выполняться по assigned и deassigned.

Полученная информация позволяет избежать использования двух скриптов, пример которых есть тут viewtopic.php?p=31422#p31422 , сократив их количество до одного.
Я пока применяю такой скрипт:

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

{
#IP компа, за появлением в сети которого наблюдаем
:local CompIP 192.168.0.109;
#Делаем Ping этого IP, чтобы высветить его в ARP принудительно и не ждать автообновления ARP
/ping  address="$CompIP" interface=bridge1 count=3
delay 3s
#Ищем нужный IP в таблице ARP
:local y [/ip arp find address="$CompIP"];
# Сравниваем наш IP с "ничем", если IP НЕ равен "ничему", т.е. имеет реальное значение, то в лог пишем что-то (можно выполнять любое другое действие)
:if ( $y!="") do={                 
:log warning "Supercomp ONline!";                 
                       }
# Сравниваем наш IP с "ничем", если IP РАВЕН "ничему", т.е. не имеет реального значения, то в лог пишем что-то (можно выполнять любое другое действие)
:if ( $y="") do={
:log warning "Supercomp  OFFline!"; 
                        }
}   


Есть проблема, а именно - скрипт выполняется только когда происходит assigned или deassigned клиента на DHCP-сервере. Т.е. когда комп включается, видим в логе микротика сперва это:

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

20:59:14 dhcp,info dhcp1 deassigned 192.168.0.000 from 00:00:00:00:00:00

И тут же это:

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

20:59:14 dhcp,info dhcp1 assigned 192.168.0.000 to 00:00:00:00:00:00

Из-за этого скрипт выполняется дважды. Но это ерунда, основная проблема в том, что при выключении кома не происходит deassigned, аренда IP продолжает висеть до истечения срока, либо при следующем включении компа обнуляется (куски лога выше). Т.е. при выключении компа скрипт не выполняется.


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

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

# Сравниваем наш IP с "ничем", если IP НЕ равен "ничему", т.е. имеет реальное значение, то в лог пишем что-то (можно выполнять любое другое действие)
:if ( $y!="") do={                 
:log warning "Supercomp ONline!";                 
                       }
# Сравниваем наш IP с "ничем", если IP РАВЕН "ничему", т.е. не имеет реального значения, то в лог пишем что-то (можно выполнять любое другое действие)
:if ( $y="") do={
:log warning "Supercomp  OFFline!";
                        }

Вот этот кусок так не проще?:

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

# Сравниваем наш IP с "ничем", если IP НЕ равен "ничему", т.е. имеет реальное значение, то в лог пишем что-то (можно выполнять любое другое действие)
:if ( $y!="") do={                 
:log warning "Supercomp ONline!";                 
                       }  else={
:log warning "Supercomp  OFFline!";
                        }

Аренда IP само собой длится на весь период заданного срока. Вы же в настройках DHCP-сервера указали это самый срок аренды. Уход компа из сети не является поводом для каких-то действий с точки зрения устройства. Если аренду сделать маленькой, Ваш скрипт станет отрабатывать слишком часто, наверное.
Вот еще вариант. Сделайте этой паре IP=MAC-address Make static в Leases и в код в район исполнения в узле else допишите что-то типа

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

/ip dhcp-server lease set [find comment="Тот несчастный, которого Вы пасете"] disabled;
:delay 3;
/ip dhcp-server lease set [find comment="Тот несчастный, которого Вы пасете"] enabled

Аренда при таком действии должна отключится. А уж тогда, делайте все остальное.
P.S.: Ерунда какая-то сегодня происходит, весь день какой-то странной работой занимаюсь...


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

Да, два if проще заменить на else, спасибо!
Из-за одного компа, может и нет смысла загоняться, а если их, к примеру, три или более?
В любом случае момент появления компа в сети через lease-script выловить можно, т.е. на 50% цель достигнута.
Есть еще идеи реализации данной задачи? С lease-script я вроде разобрался, вопрос теперь в том, ЧТО туда лучше вписать, вместо приведенного выше скрипта?


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

Отредактировал сообщение выше, читайте...


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

Прочитал. Попробовал...
Скрипт такой получился:

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

{
:local CompIP 192.168.0.000;
:local LeaseComment HZ;
/ping  address="$CompIP" interface=bridge1 count=3
delay 3s
:local y [/ip arp find address="$CompIP"];
:if ( $y!="") do={                 
:log warning "SuperComp ONline!";                 
                       }  else={ 
:log warning "SuperComp OFFline!";
/ip dhcp-server lease set [find comment="$LeaseComment"] disabled=yes;
:delay 3s;
/ip dhcp-server lease set [find comment="$LeaseComment"] disabled=no;
                        }
}   


Выше не озвучено, но в привязке мак-а к IP, еще надо дать коммент, в данном случае это (HZ).
Также ip dhcp-server lease set disabled=yes (no).

Таки проблема сохранилась - вижу только момент появления компа в сети, когда вырубается, то скрипт тупо не запускается, т.е. процедуры assigned/deassigned не происходило, а запуск этой процедуры как раз в скрипте, а скрипт запускается только если происходит assigned/deassigned в DHCP... Ну, вы поняли...
Кстати, вот еще вопрос - скрипт же будет запускаться КАЖДЫЙ раз, когда ЛЮБОЕ устройство будет получать аренду IP, т.е. по 20 раз за день мне будут сообщения, что нужные мне комп оффлайн или онлайн.


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

:)-(: Давайте зайдем с другой стороны. Не станем запускать скрипт в DHCP, предположим, что будем обходится обычными скриптами.
Тогда у меня получается вот такая связка. При старте системы нужно запускать скрипт:

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

:global StatIP "OFFline"

Это опорное значение, оно будет ориентиром. Далее такой скрипт ну скажем каждые 30 секунд:

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

{
:local CompIP 192.168.0.11;
/ping  address=$CompIP interface=bridge1 count=3;
delay 3;
:local y [/ip arp find address=$CompIP];
:if ( $y!="" ) do={
:if ( $StatIP="OFFline" ) do={
:set StatIP "ONline";
:log warning "SuperComp ONline!";
}
} else={
:if ( $StatIP="ONline" ) do={
:set StatIP "OFFline";
:log warning "SuperComp OFFline!";
}
}
}

Как бы максимальная погрешность срабатывания будет 29 секунд. Не думаю, что это актуально. Проверьте, писал не проверяя, просто в текстовом редакторе. Мог где-нибудь ошибиться.
P.S.: Поправил, проверив терминале. Вроде работает. Надо проверять в скриптах.


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

Так, у меня в скриптах почему-то не срабатывает. Пойду читать мануалы...


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

Таки да, не работает, однако, если закомментить строки для работы с глобальной переменной, то скрипт отрабатывает. Т.е. косяк именно в работе с этой переменной.
Собственно говоря, ранее viewtopic.php?p=31412#p31412 у меня скрипт тоже не работал, когда я переменную делал глобальной, и этот скрипт viewtopic.php?p=31423#p31423 . Может не так делал?


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

А если так?

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

{
{
 :global StatIP;
 :local CompIP 192.168.0.15;
 :local t [/ping  address=$CompIP interface=bridge1 count=3];
 :delay 5;
 :local y [/ip arp find address=$CompIP];
 :local Ok true;
 :set Ok ($StatIP = "OFFline")
 :if ($y != "" && $Ok) do={
:set StatIP ONline;
:log info "ONline"
}                     
:if ($y = "" && !$Ok) do={
:set StatIP OFFline;
:log info "OFFline"
}
}

По-моему надо объявить переменную в начале скрипта. Что-то так в памяти всплывает, только вот давно это было. Делал я что-то подобное. Попробуйте еще раз...
Я там маленько логику поменял, чтобы не путаться в двойных условиях. Думаю, разберетесь.


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

Тоже не работает.


Ответить