Как сделать? Вытаскивать МАК адреса из DHCP пакетов

VIP_Graff
Offline
Зарегистрирован: 13.02.2016

Помогите реализовать идею. Я честно пытался сам получать гуляющие DHCP пакеты, но увы моя каша не работает. От слова совсем.

Цель:
При появлении телефона в сети, включать свет в подъезде.
Хочу реализовать это на ардуинке подключенной к локальной сети через езернет шилд W5100.
Исполнительное устройство: свет на улице, телефон подключается к Wi-Fi немного раньше попадания в освещаемую зону.

Что имеем:
Телефон при обнаружении WiFi, подключается к сети. Получение IP адреса по DHCP.
Готовая библиотека получения DHCP адреса для W5100, но у меня не получается ее переделать в свою библиотеку, чтобы она принимала все DHCP пакеты и возвращала МАК адреса устройства.

Дополнительный аргумент в пользу парсинга МАКов, охранять безопасность сети.
По принципу как с работой RF приемником.

Чтобы можно было построить выражние типа:

IF ResivedMAC == 112233445566 OR ResivedMAC == 998877665544 Then
  // включить свет;
ELSEIF ResivedMAC == 889977665544 Then
  // ничего не делать;
ELSE
  // бить тревогу, чужие в сети;
END; 

Для новых заглянувщих в тему краткий FAQ идей по реализации:
1. bluetooth и датчик движения - использовать не вариант, из-за большого расстояния, необходимое расстояние только Wi-Fi дает.
2. задать статические адреса и постоянно пинговать - выглядит не совсем правильным, из-за постоянно гуляющих запросов, которые будут долбить пока устройство в сети (будет ли себя хорошо чувствовать устройство под постоянной атакой пинга, знаю что айфоны уходят в энергосбережение и не отвечают на пинг)
3. Читал про приложение Tasker, но хотелось бы обойтись без задействования дополнительного ПО
4. Дома  используется 3G интернет, "снаружи" доступ отсутствует. Сервера дома - нету. Есть роутер с OpenWRT. Сервера с белым IP - нету.

Я рассматривал эти идеи до создании темы, но нету знаний в реализации задуманного:

1. На роутере стоит OpenWRT. Знаю что можно спарсить оттуда МАК. Что бы роутер "скриптом проверял подключившихся" и передавал команды(или МАКи) на ардуину.
2. Парсить МАКи из ARP пакетов, они то всегда ходят в сети. Но информацию для меня понятную, как это делать не нашел.
[*]3. Парсить МАКи из гуляющих DHCP запросов. Запросы в сети появляются когда устройство подключается или продлевает аренду (Что меня устраивает).

Товарищ Мичман
Offline
Зарегистрирован: 13.02.2016

Посмотрите в сторону ESP8266

VIP_Graff
Offline
Зарегистрирован: 13.02.2016

Спасибо. А не могли бы вы подсказать куда смотреть в первую очередь? Есть ли у ESP8266 фукционал полученя Мак адресов?

Потому, что про ESP8266 слышал, и даже в руках держал, но работать - не работал с ней и возможностей ее не знаю.

Еще вопрос. У меня устройства(телефон) подключаются к моей сети автоматически при обнаружении.

Как использовать ESP8266, если он тоже с Wi-Fi ? Парсить все пакеты в воздухе?

Или держать подключенным к моей сети? Тогда какой смысл использовать ESP8266? Ардуина будет получать также все пакеты, но  только по проводному соединению.

Расскажите как представляете реализацию моего вопроса? Потому, что у меня пока нет представления, как может ESP8266 мне помочь.

Товарищ Мичман
Offline
Зарегистрирован: 13.02.2016

У меня и самого руки пока не дошли до этого модуля, но думаю прошивка NODEMCU + lua скрипт (самому писать) вполне справится с поставленной задачей. И ардуино тут вобщем-то будет только играть роль программатора. ESP8266 работает автономно.

vlad219i
Offline
Зарегистрирован: 05.03.2014

А если в условиях задачи забыть о DHCP? В настройках роутера сделать жёсткую привязку МАКа телефона к конкретному IP и ардуиной тупо пинговать этот IP с небольшим интервалом (ну или что-то подобное)? А по результатам пинга уже делать выводы, есть этот телефон в доступе или нет. Ну так - просто мысль вслух...