2015-03-27 5 views
2

Я работаю над проектом на базе Intel Edison (под управлением Debian на основе Ubilinux). Мне нужно, чтобы Edison выполнял некоторый код всякий раз, когда мой Android-телефон (работает CM11) подключается к тому же WiFi, что и Edison. Как я могу обнаружить наличие моего телефона в Эдисоне? Я попробовал следующее.Как обнаружить присутствие устройства в сети Wi-Fi?

1.Pinging: Но проблема в том, что маршрутизатор каждый раз назначает разные IP-адреса из-за DHCP. Поэтому я не буду знать IP-адрес своего телефона. Есть ли способ пинга на основе MAC-адреса устройства?

2. Я думал о передаче специального пакета обнаружения с моего телефона, когда он подключается к WiFi. Но я не знаю, с чего начать с этого подхода.

+1

Это не вопрос python. Это вопрос о wifi-протоколе и его экспонировании в данной ОС. Как только вы знаете, что делать, вам нужно сделать это с помощью python, но это будет другой вопрос. – deets

+0

@deets Я согласен. Но вторая часть вашего комментария объясняет, почему я пометил «python» :) – Heisenberg

+0

@Heisenberg, если вам помог любой вопрос (и arp - это путь, так что они оба сделали ..) нажмите на галочку рядом с вопросом. – pstanton

ответ

2

Нахождение mac-адреса, вероятно, будет работать. В основном вы можете запустить команду arp, чтобы узнать, какой MAC-адрес соответствует IP-адресу. Там это вопрос на том, что здесь:

Obtain MAC Address from Devices using Python

2

Arprequest позволяет «arping» MAC-адреса в Python:

from arprequest import ArpRequest 
>>> ar = ArpRequest('10.0.0.1', 'eth0') 
>>> ar.request() 
True 

Поп, что в цикле и у Вас есть MAC монитор.

В качестве альтернативы вы можете использовать подход, основанный на событиях, и использовать Scapy для отслеживания запросов DHCP с вашего устройства Android и принятия мер, когда он его видит.