Как заставить DHCP роутера сообщать о подключении устройства

Подключение исполнительных устройств, датчиков, контроллеров.

Модератор: immortal

dmw
Сообщения: 469
Зарегистрирован: Вт мар 12, 2013 1:22 am
Благодарил (а): 41 раз
Поблагодарили: 81 раз

Как заставить DHCP роутера сообщать о подключении устройства

Сообщение dmw » Ср дек 17, 2014 1:37 pm

Задался я как то целью контролировать момент подключения устройства к сети. В частности нужно было при включении ТВ включать еще и спутниковый ресивер. Также при появлении заданных устройств с wifi переключать определенные режимы, например выключать "никого нет дома".
Модный в последнее время модуль ESP8266 можно держать вообще выключенным. Сработал геркон, включилось питание, модуль подключился к сети и выключился, а MD уже знает, этож какая экономия на батарейках.

Конечно можно в модуле “Устройства Online” пинговать устройства ежесекундно, но зачем если можно заставить роутер сообщать о моменте выдления им ip-адреса устройству в момент подлючения.
На современных прошивках на роутерах в качестве DHCP-сервера используется dnamasq. Это легковесный кэширующий DNS-, DHCP- и TFTP-сервер “три в одном”. Он умеет исполнять заданный скрипт при возниковениии любых изменений в DHCP таблицах, что мне и нужно. К сожалению на официальной прошивке не удалось, поэтому все делал на Tomatousb.

Создал вот такой простейший сценарий в админке MD с назваием “dhcp”:

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

$process=$params['process']; // =add/old/del
$mac=$params['mac'];
$ip=$params['ip'];
$host=$params['host'];
if (!$host) {
    say("Присоединилось не известное устройство, присвоен IP:".$ip);
} else {
    say("Присоединилось устройство: ".$host);
}
Далее все делал на роутере.
Чтобы после перезагрузки скрипт никуда не исчезал, включил jffs: Administration - JFFS - Enable
Создал скрипт /jffs/scripts/dhcp.sh который будет отсылать события на MD:

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

#!/bin/sh
#$1 = process are:
#     "add"    (means a lease has been created),
#    "del"    (means it has been destroyed)
#    "old"    (notification of an existing lease when dnsmasq starts
#        or a change to MAC address or hostname of an existing lease
#        (also, lease length or expiry and client-id, if leasefile-ro is set)
#$2 = MAC address of the host (or DUID for IPv6) 
#$3 = IP address
#$4 = hostname, if known
let statleasetime=`nvram get dhcpd_slt`*60 #all parameters stored in nvram: dhcpd_slt=3600
let guestleasetime=`nvram get dhcp_lease`*60 #all parameters stored in nvram: dhcp_lease=1440
md="http://192.168.1.25/objects/?script=dhcp"
if [ $1='old' ]; then
    if [ $DNSMASQ_SUPPLIED_HOSTNAME ]; then
        wget -O - -q $md"&process="$1"&mac="$2"&ip="$3"&host="$4
    elif [ $DNSMASQ_VENDOR_CLASS ]; then
        wget -O - -q $md"&process="$1"&mac="$2"&ip="$3"&host="$4
    elif [ $DNSMASQ_TIME_REMAINING == $statleasetime ]; then
        wget -O - -q $md"&process="$1"&mac="$2"&ip="$3"&host="$4
    elif [ $DNSMASQ_TIME_REMAINING == $guestleasetime ]; then
        wget -O - -q $md"&process="$1"&mac="$2"&ip="$3"&host="$4
    fi
elif [ $1='add' ]; then
    wget -O - -q $md"&process="$1"&mac="$2"&ip="$3"&host="$4
fi
Тут надо пояснить про кучу проверок. Дело в том что dnamasq вызывает скрипт периодически (у меня каждые 30 минут), при этом в параметрах вызова скрипта будет стоять флаг $1=“old” и передается $DNSMASQ_TIME_REMAINING - оставшееся время до конца аренды IP, и не важно что клиент уже мог отключиться. Если за то время пока аренда действует клиент снова подключится, скрипту будет передан тотже флаг “old”, однако время аренды начнет отсчитываться заново. Експериментально выявлено что $DNSMASQ_SUPPLIED_HOSTNAME и $DNSMASQ_VENDOR_CLASS также передаются только когда открывается ареда. Поэтому все нужно перепроверить чтобы лишний раз не заваливать MD ложными сообщениями.

Три топора скрипту:

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

chmod 777 /jffs/scripts/dhcp.sh
Теперь нужно сказать сервису dnamasq чтобы запускал данный скрипт. Через web-интерфейс
(Tomato) Advanced - DHCP/DNS - Custom configuration: http://victek.is-a-geek.com/virtual/tom ... cpdns.html
(dd-wrt) Services - Additional DNSMasq Options: http://www.dd-wrt.com/demo/Services.asp
добавить параметр dhcp-script=/jffs/scripts/dhcp.sh
Либо напрямую в nvram:

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

nvram set dnsmasq_custom=dhcp-script=/jffs/scripts/dhcp.sh
nvram commit
В итоге в конце конфигурационного файла /etc/dnsmasq.conf должна добавится нужная строчка:
dhcp-script=/jffs/scripts/dhcp.sh
Это всё.

Картинка для наглядности:
Вложения
Tomato.jpg
Tomato.jpg (105.04 КБ) 10426 просмотров
За это сообщение автора dmw поблагодарили (всего 8):
sergejey (Ср дек 17, 2014 1:47 pm) • Jager (Вт дек 08, 2015 9:51 pm) • savenko_egor (Ср дек 09, 2015 6:42 pm) • VGorokhov (Вт янв 26, 2016 4:30 am) • ipz (Чт мар 10, 2016 9:35 pm) • VooDooN (Пн апр 09, 2018 10:47 pm) • directman66 (Пт апр 13, 2018 9:50 am) • Gelezako (Сб май 19, 2018 12:51 pm)
Рейтинг: 9.3%
Аватара пользователя
Amarok
Сообщения: 1425
Зарегистрирован: Пт дек 14, 2012 12:24 pm
Откуда: Россия, Нижняя Тура
Благодарил (а): 460 раз
Поблагодарили: 126 раз
Контактная информация:

Re: Как заставить DHCP роутера сообщать о подключении устрой

Сообщение Amarok » Ср дек 17, 2014 4:39 pm

А под Mikrotik такое?
Алиска живёт на Ubuntu Server 14.04.3 LTS
connect, группа в Telegram, Яндекс.Деньги для благодарностей за помощь: 41001355945165
dmw
Сообщения: 469
Зарегистрирован: Вт мар 12, 2013 1:22 am
Благодарил (а): 41 раз
Поблагодарили: 81 раз

Re: Как заставить DHCP роутера сообщать о подключении устрой

Сообщение dmw » Ср дек 17, 2014 5:08 pm

К сожалению микротиков у меня нет, но чуть порывшись набрел на статью:
http://tugibaev.ru/2014/04/dhcp-lease-m ... otify-sms/
Попробуйте может поможет?
Если получится, выложите здесь пошагово?
Аватара пользователя
Amarok
Сообщения: 1425
Зарегистрирован: Пт дек 14, 2012 12:24 pm
Откуда: Россия, Нижняя Тура
Благодарил (а): 460 раз
Поблагодарили: 126 раз
Контактная информация:

Re: Как заставить DHCP роутера сообщать о подключении устрой

Сообщение Amarok » Чт дек 18, 2014 7:06 am

Пробую, воюю. Хотя я плохой кодер
Алиска живёт на Ubuntu Server 14.04.3 LTS
connect, группа в Telegram, Яндекс.Деньги для благодарностей за помощь: 41001355945165
Jager
Сообщения: 708
Зарегистрирован: Сб авг 18, 2012 10:21 am
Благодарил (а): 26 раз
Поблагодарили: 183 раза

Re: Как заставить DHCP роутера сообщать о подключении устрой

Сообщение Jager » Вт дек 08, 2015 9:50 pm

dmw писал(а):Задался я как то целью контролировать момент подключения устройства к сети.
А можно ли таким же способом контролировать процесс отключения устройства от сети?
roiksv
Сообщения: 3
Зарегистрирован: Вт фев 03, 2015 10:28 pm
Благодарил (а): 0
Поблагодарили: 0

Re: Как заставить DHCP роутера сообщать о подключении устрой

Сообщение roiksv » Пн мар 14, 2016 9:28 pm

Что-то после добавления dhcp-script=/jffs/scripts/dhcp.sh пропадает интернет
Аватара пользователя
djprizrak
Сообщения: 64
Зарегистрирован: Пн фев 12, 2018 10:58 am
Благодарил (а): 3 раза
Поблагодарили: 17 раз

Re: Как заставить DHCP роутера сообщать о подключении устрой

Сообщение djprizrak » Пн апр 09, 2018 10:12 pm

Jager писал(а):
Вт дек 08, 2015 9:50 pm
dmw писал(а):Задался я как то целью контролировать момент подключения устройства к сети.
А можно ли таким же способом контролировать процесс отключения устройства от сети?
Подниму вопрос, кто и каким образом в 2018 году контролирует момент подключения и отключения устройства к роутеру?
Aven
Сообщения: 529
Зарегистрирован: Сб мар 12, 2016 6:33 pm
Откуда: Ухта, Россия
Благодарил (а): 3 раза
Поблагодарили: 154 раза

Re: Как заставить DHCP роутера сообщать о подключении устройства

Сообщение Aven » Вт апр 10, 2018 12:16 am

лучший роутер это линукс роутер, а там что хочешь делай :) самое простое таблицу arp контролировать.
dmw
Сообщения: 469
Зарегистрирован: Вт мар 12, 2013 1:22 am
Благодарил (а): 41 раз
Поблагодарили: 81 раз

Re: Как заставить DHCP роутера сообщать о подключении устройства

Сообщение dmw » Вт апр 10, 2018 5:52 am

arp не отслеживает отключения устройств, впрочем как и в целом штатные средства linux. Если только физические разъемы контролировать, но с wifi-устройствами это не прокатит. Корректно момент отключения может отследить только само устройство, например через tasker.
Аватара пользователя
lanket
Сообщения: 1168
Зарегистрирован: Вт окт 14, 2014 11:27 pm
Откуда: Санкт-Петербург
Благодарил (а): 260 раз
Поблагодарили: 163 раза

Re: Как заставить DHCP роутера сообщать о подключении устройства

Сообщение lanket » Вт апр 10, 2018 7:07 am


dmw писал(а):... Корректно момент отключения может отследить только само устройство, например через tasker.
Но когда это устройство отваливается придётся сообщить мажорику об этом через наружную сеть.
И в последнее время андроиды во время сна при не надобности вафли отрубить её. Как только будиш телефон он обратно к вафле коннектиться. О чем благополучно и таскер сообщает, в результате отрубил это, и устройства онлайн фиксируют этот факт.

Отправлено с моего Redmi Note 4 через Tapatalk

Разработка голосового асистента для Мажордомо по любому ключевому слову.
:arrow: Обсужение
:arrow: gitHub 2й версии терминала
:arrow: GitHub модуля для МД
gitHub сырого модуля 2й версии
:arrow: Connect
Rasberry Pi 2, MDM, MySensors. И говорящий апельсин.
Ответить