Определение людей дома с использованием ARP и SNMP
Добавлено: Чт ноя 24, 2016 11:48 pm
Добрый вечер!
Сразу хочу сказать что в системе Majordomo я полный чайник, и в программировании на PHP я так же полный ноль. Но я разбираюсь в сетях.
Возможно то что я хочу реализовать можно сделать как-то иначе, по этому не пинайте сильно, а направьте в нужную сторону.
У меня появилась идея как определять кто и в какое время приходит домой.
Я видел много идей как сделать это через прослушивание BlueTooth адресов от мобильных телефонах.
Это хорошая идея, но только многие люди не держат включенным BlueTooth на телефонах из-за его энергопотребления.
Но за-то держат включенным Wi-Fi.
Есть несколько методов как определить наличие включенного Wi-Fi модуля поблизости:
1. Слушать эфир Wi-Fi свистком который поддерживает Promisc mode (не все адаптеры поддерживают), с самого сервера Majordomo допустим если у него есть свободный свисток. В этом случае устройство не обязательно должно быть подключено к какой-то сети и это плюс.
2. Спросить у Wi-Fi маршрутизатора кто на нем зарегистрирован. Простейшим способом который я придумал это опросить его через SNMP на предмет его ARP таблички. Маршрутизатор Wi-Fi естественно должен поддерживать эту функцию. Не знаю как на счет устройств с оригинальной прошивкой, но с прошивками типа DD-Wrt, OpenWrt и им подобными это делается просто.
И вот что у меня получилось:
snmpwalk -v1 -c public -O n 10.100.1.1 1.3.6.1.2.1.4.22.1.2
.1.3.6.1.2.1.4.22.1.2.0.10.100.1.2 = STRING: cc:7b:35:92:65:62
.1.3.6.1.2.1.4.22.1.2.0.10.100.1.10 = STRING: 10:dd:b1:ef:73:cf
.1.3.6.1.2.1.4.22.1.2.0.10.100.1.127 = STRING: 88:53:95:4b:85:94 <- мой мобильничек
.1.3.6.1.2.1.4.22.1.2.0.10.100.1.128 = STRING: c0:b0:2d:8f:42:9e
.1.3.6.1.2.1.4.22.1.2.0.10.100.1.135 = STRING: 58:55:ca:46:c1:77 <- Жена
.1.3.6.1.2.1.4.22.1.2.0.10.100.1.139 = STRING: 74:23:44:9b:95:f1 <- Дочка
.1.3.6.1.2.1.4.22.1.2.0.192.168.1.1 = STRING: e4:77:23:f8:a3:7c
По скольку современные мобильные телефоны постоянно куда-то что-то отправляют то и их запись в таблице ARP не исчезает пока аппарат находится в зоне действия Wi-Fi точки доступа.
Далее я создал класс объектов People и добавил в него объектами членов моей семи. Так же Классу добавил свойство для дочерних объектов назвал PhoneMAC и Pace.
Соответственно в свойство PhoneMAC добавил MAC адреса их сотовых телефонов.
И на этом у меня все остановилось.
Я понятия не имею что мне делать дальше. Что бы когда бы выполнялась моя команда и в выводимой табличке присутствовал MAC члена семьи то его свойство Place менялось бы на "Home", а когда пропадал то на "Unknown" допустим.
Полагаю что надо написать скрипт или на PHP с опросом соответствующих SNMP OID или парсить вывод команды которую я привел выше.
Как вам моя идея?
Возможно кому-то моя идея понравится на столько что он захочет ее реализовать?
Я сам попробую, но как я говорил выше, на PHP я никогда не писал. И как получить из него доступ к объектам Majordomo видел только в примерах...
Мне так же очень интересны ваши идеи по всему этому поводу!
Сразу хочу сказать что в системе Majordomo я полный чайник, и в программировании на PHP я так же полный ноль. Но я разбираюсь в сетях.
Возможно то что я хочу реализовать можно сделать как-то иначе, по этому не пинайте сильно, а направьте в нужную сторону.
У меня появилась идея как определять кто и в какое время приходит домой.
Я видел много идей как сделать это через прослушивание BlueTooth адресов от мобильных телефонах.
Это хорошая идея, но только многие люди не держат включенным BlueTooth на телефонах из-за его энергопотребления.
Но за-то держат включенным Wi-Fi.
Есть несколько методов как определить наличие включенного Wi-Fi модуля поблизости:
1. Слушать эфир Wi-Fi свистком который поддерживает Promisc mode (не все адаптеры поддерживают), с самого сервера Majordomo допустим если у него есть свободный свисток. В этом случае устройство не обязательно должно быть подключено к какой-то сети и это плюс.
2. Спросить у Wi-Fi маршрутизатора кто на нем зарегистрирован. Простейшим способом который я придумал это опросить его через SNMP на предмет его ARP таблички. Маршрутизатор Wi-Fi естественно должен поддерживать эту функцию. Не знаю как на счет устройств с оригинальной прошивкой, но с прошивками типа DD-Wrt, OpenWrt и им подобными это делается просто.
И вот что у меня получилось:
snmpwalk -v1 -c public -O n 10.100.1.1 1.3.6.1.2.1.4.22.1.2
.1.3.6.1.2.1.4.22.1.2.0.10.100.1.2 = STRING: cc:7b:35:92:65:62
.1.3.6.1.2.1.4.22.1.2.0.10.100.1.10 = STRING: 10:dd:b1:ef:73:cf
.1.3.6.1.2.1.4.22.1.2.0.10.100.1.127 = STRING: 88:53:95:4b:85:94 <- мой мобильничек
.1.3.6.1.2.1.4.22.1.2.0.10.100.1.128 = STRING: c0:b0:2d:8f:42:9e
.1.3.6.1.2.1.4.22.1.2.0.10.100.1.135 = STRING: 58:55:ca:46:c1:77 <- Жена
.1.3.6.1.2.1.4.22.1.2.0.10.100.1.139 = STRING: 74:23:44:9b:95:f1 <- Дочка
.1.3.6.1.2.1.4.22.1.2.0.192.168.1.1 = STRING: e4:77:23:f8:a3:7c
По скольку современные мобильные телефоны постоянно куда-то что-то отправляют то и их запись в таблице ARP не исчезает пока аппарат находится в зоне действия Wi-Fi точки доступа.
Далее я создал класс объектов People и добавил в него объектами членов моей семи. Так же Классу добавил свойство для дочерних объектов назвал PhoneMAC и Pace.
Соответственно в свойство PhoneMAC добавил MAC адреса их сотовых телефонов.
И на этом у меня все остановилось.
Я понятия не имею что мне делать дальше. Что бы когда бы выполнялась моя команда и в выводимой табличке присутствовал MAC члена семьи то его свойство Place менялось бы на "Home", а когда пропадал то на "Unknown" допустим.
Полагаю что надо написать скрипт или на PHP с опросом соответствующих SNMP OID или парсить вывод команды которую я привел выше.
Как вам моя идея?
Возможно кому-то моя идея понравится на столько что он захочет ее реализовать?
Я сам попробую, но как я говорил выше, на PHP я никогда не писал. И как получить из него доступ к объектам Majordomo видел только в примерах...
Мне так же очень интересны ваши идеи по всему этому поводу!