Как обнаружить мобильное устройство при подключении к домашней сети Wi-Fi?

Каким будет лучший способ распознать сервер, когда конкретное мобильное устройство (сотовый телефон, iPad и т. д.) подключается к сети (конечно, без проводов)?

В качестве примерной ситуации у человека есть домашняя сеть Wi-Fi, правильно настроенная на его мобильном телефоне. Когда он попадает в зону действия маршрутизатора, он будет подключаться (ничего нового об этом). После подключения к этому маршрутизатору его домашний сервер запустит определенную программу (или бросит уведомление, напишет файл и т. Д.).

Я думал, что возможным решением будет сетевое пользовательское «веб-приложение», которое будет запущено с телефона, чтобы сервер узнал, что страница была вызвана. Однако, если это можно сделать, когда телефон подключается автоматически, это было бы лучше.

Любые мысли или альтернативные решения были бы очень благодарны, поэтому заранее спасибо!

8
задан 28 May 2012 в 04:20

63 ответа

У меня было два решения, которые я использовал. (Python)

Решение 1

Сначала нужно было использовать известные ipnumbers, которые я хочу отслеживать. Я сделал это в три этапа. 1 # используйте «-c1», чтобы отправить только один пинг. Если устройство активно, оно ответит и. Функция будет успешно завершена. 2 # используйте «-c3», теперь дайте ей больше времени для ответа на один из трех. Обычно это достаточно, когда это плохой сигнал Wi-Fi. 3 # используйте «-c10», это может потребоваться, если это действительно плохой сигнал wifi. (Отмечено, что старый iPad нуждается в 10 попытках ответить). Чтобы ускорить работу, я создал отдельные Процессы для каждого номера ip, который я хочу отслеживать.

Я также изменил интервалы pinging в зависимости от успеха или нет. Если он найдет устройство, он будет ждать дольше, пока он не проверит еще раз. Если это сбой, он попытается снова через 60 секунд. (Я хочу включить свет, когда я войду в свой дом), поэтому достаточно 60 секунд, чтобы найти меня на улице

. Это сработало отлично! Когда я вернулся домой, он почувствовал меня и выключил свет, и выключился, когда я ушел.

Решение 2

Арпинг, возможно, не был тяжелым в сети, но я изменил решение, чтобы пропустить все пинги и создали мой собственный сервер DHCP на моем малине pi.

Затем я добавил «on commit», который запускает скрипт, как только устройство получает ipnumber. Этот скрипт использует «curl http API call» для уведомления моего www-сервера (Flask), как только устройство получает или обновляет его ipnumber.

На моем Android я изменил настройки, чтобы никогда не отключать Wi-Fi, когда экран выключен. Не уверен, возможно ли это на iPhone. Никакой большой разницы в батарее (OnePlus 5)

Первое решение также включало Bluetooth-сканирование для конкретного Mac. Поэтому, даже если мой WiFi отключен на моем телефоне, он все равно будет ощущать Bluetooth. Использование Mac-адреса не нужно связывать с ним или иметь его для просмотра всеми.

0
ответ дан 25 July 2018 в 18:44

Я наткнулся на это, и как-то я сделал что-то подобное, решив опубликовать ответ.

Я сделал следующее:

1. Ping all addresses within given network and subnet (excluding network and broadcast addresses)
2. Wait for response has a timeout so that if device doesn't answer from furthest corner of your WiFi it is considered not present.
3. So we get all IPs on the net that answer to ICMP packets.
4. Then use each detected IP to ask for more and decide which device you like and which one you don't.

В моем случае у меня был HTTP-сервер работает на моем устройстве. Поэтому я просто отправил HTTP HEAD-запрос практически ничего на порт 80. Если устройство ответило, и заголовок сервера правильно назван, то это мое устройство.

Но я не мог идти быстро, не пинговая первым. HTTP - это TCP, а запрос большой, поэтому для Wi-Fi требуется 4 секунды. Делать это для 253 адресов медленно, как черт. Но у вас не было бы 253 устройств (возможно) меньше серверов HTTP. (или в вашем случае, телефоны)

Учитывая, что журналы маршрутизаторов - очень хорошая идея и легки. И даже быстрее, чем пинговать все. Некоторые маршрутизаторы даже не нуждаются в регистрации для доступа к ним.

Кроме того, стоит проверить, поддерживает ли ваше устройство поддержку UPNP. Если это так, вы можете использовать UPNP для обнаружения своего присутствия. Это будет официальное решение (прослушивание в эфир для UDPs UPNP). Но все устройства не поддерживают его. Но все устройства не поддерживают ICMP. (они не хотят, чтобы их бомбардировали бесполезно).

Есть еще одна интересная возможность. Вы можете ловить рыбу для пакетов DHCP и видеть, когда маршрутизатор передает новому устройству IP-адрес. Но это не будет работать для устройств со статическими IP-адресами. Они даже не дотронутся до сети, пока им не понадобится что-то. Подключение к самому Wi-Fi на другом уровне и не может быть легко обнаружено, если вы не хотите действовать как снифер. Я не уверен, даже если это возможно с сетевым адаптером в режиме promisquous. Я думаю, для этого потребуется дополнительное оборудование.

Чтобы выполнить ping в Python, без подпроцесса для ping-программы и потери скорости, вам необходимо создать raw-сокет и построить ICMP-пакет вручную. Это не сложно. Есть пример этого где-то в Интернете. Конечно, чтобы отправить его, вам понадобятся права root, как и ping. Это недостаток. Если вы будете распространять программное обеспечение, вы не можете ожидать, что пользователи захотят запустить его как root.

0
ответ дан 25 July 2018 в 18:44

Я действительно планирую реализовать решение для этого, отвечающее следующим требованиям:

  1. Телефон не должен иметь назначенный IP-адрес в сети.
  2. телефон не должен периодически посылать сигналы, которые могли бы разрядить его.
  3. Если в сети много телефонов, все они будут обнаружены.

My

Предположим, что локальная сеть - 192.168.1.0 ...

Итак, я бы использовал APP, чтобы установить файловую систему телефонов с помощью ssh, но она может быть использована для чего угодно.

который прослушивает широковещательные широковещательные рассылки UDP: 192.168.1.255. Это приложение не будет разряжать батарею, поскольку она полностью пассивна. (он активируется только при получении пакета).

Демон на компьютере будет периодически отправлять широковещательные сообщения на широковещательный адрес 192.168.1.255. Телефон ответит на такие сигналы, указав их имя, идентификатор, IP-адрес и т. Д.

Теперь компьютер знает, что телефон существует в сети, и мой случай может вызвать mount sshfs.

Конечно, это требует большой работы, включая работу по программированию, и нелегко. Но я думаю, что это будет самое надежное и разумное решение.

2
ответ дан 25 July 2018 в 18:44

Я думаю, что это можно легко выполнить с помощью arp-scan.

Установить arp-scan: sudo apt-get install arp-scan Обнаружение всех хостов в локальной сети: sudo arp-scan -l

Вы может периодически настраивать crontab (каждые 2 минуты) запустить сценарий, который сканирует сеть с помощью arp-scan и анализирует ее вывод, чтобы обнаружить активные хосты.

3
ответ дан 25 July 2018 в 18:44

Я написал сценарий, который делает что-то подобное, используя arp-scan и статический IP-адрес на iPhone.

Вы можете найти здесь код: https://github.com/blackairplane/pydetect

Его нужно очистить, поскольку я новичок в Python, но я думаю, что это иллюстрирует концепцию.

0
ответ дан 25 July 2018 в 18:44

Лучший способ, который я могу придумать, - дать указанному устройству статический IP-адрес и использовать простой скрипт для ping устройства каждые X секунд и запускать вашу программу / уведомление.

Замечания: Многие телефоны не будут подключаться к сети Wi-Fi, пока не проснутся от сна. Ваш скрипт должен будет определить разницу между телефоном, который будет спать, и телефоном, выходящим из дома, возможно, учитывая время суток. После этого, когда скрипт запускает программу для запуска или появляется уведомление, тривиально.

1
ответ дан 25 July 2018 в 18:44
import subprocess

if __name__ == '__main__':
    while True:
        sleep(5)
        p = subprocess.Popen("arp-scan -l | grep xx:xx:xx:xx:xx:xx", stdout=subprocess.PIPE, shell=True)
        (output, err) = p.communicate()
        p_status = p.wait()
        if output:
            print "Yay, the devine is connected to your network!"
        else:
            print "The device is not present!"

Таким образом, вы можете сканировать MAC-адрес устройства:)

3
ответ дан 25 July 2018 в 18:44

У меня было два решения, которые я использовал. (Python)

Решение 1

Сначала нужно было использовать известные ipnumbers, которые я хочу отслеживать. Я сделал это в три этапа. 1 # используйте «-c1», чтобы отправить только один пинг. Если устройство активно, оно ответит и. Функция будет успешно завершена. 2 # используйте «-c3», теперь дайте ей больше времени для ответа на один из трех. Обычно это достаточно, когда это плохой сигнал Wi-Fi. 3 # используйте «-c10», это может потребоваться, если это действительно плохой сигнал wifi. (Отмечено, что старый iPad нуждается в 10 попытках ответить). Чтобы ускорить работу, я создал отдельные Процессы для каждого номера ip, который я хочу отслеживать.

Я также изменил интервалы pinging в зависимости от успеха или нет. Если он найдет устройство, он будет ждать дольше, пока он не проверит еще раз. Если это сбой, он попытается снова через 60 секунд. (Я хочу включить свет, когда я войду в свой дом), поэтому достаточно 60 секунд, чтобы найти меня на улице

. Это сработало отлично! Когда я вернулся домой, он почувствовал меня и выключил свет, и выключился, когда я ушел.

Решение 2

Арпинг, возможно, не был тяжелым в сети, но я изменил решение, чтобы пропустить все пинги и создали мой собственный сервер DHCP на моем малине pi.

Затем я добавил «on commit», который запускает скрипт, как только устройство получает ipnumber. Этот скрипт использует «curl http API call» для уведомления моего www-сервера (Flask), как только устройство получает или обновляет его ipnumber.

На моем Android я изменил настройки, чтобы никогда не отключать Wi-Fi, когда экран выключен. Не уверен, возможно ли это на iPhone. Никакой большой разницы в батарее (OnePlus 5)

Первое решение также включало Bluetooth-сканирование для конкретного Mac. Поэтому, даже если мой WiFi отключен на моем телефоне, он все равно будет ощущать Bluetooth. Использование Mac-адреса не нужно связывать с ним или иметь его для просмотра всеми.

0
ответ дан 31 July 2018 в 11:12

Я наткнулся на это, и как-то я сделал что-то подобное, решив опубликовать ответ.

Я сделал следующее:

1. Ping all addresses within given network and subnet (excluding network and broadcast addresses)
2. Wait for response has a timeout so that if device doesn't answer from furthest corner of your WiFi it is considered not present.
3. So we get all IPs on the net that answer to ICMP packets.
4. Then use each detected IP to ask for more and decide which device you like and which one you don't.

В моем случае у меня был HTTP-сервер работает на моем устройстве. Поэтому я просто отправил HTTP HEAD-запрос практически ничего на порт 80. Если устройство ответило, и заголовок сервера правильно назван, то это мое устройство.

Но я не мог идти быстро, не пинговая первым. HTTP - это TCP, а запрос большой, поэтому для Wi-Fi требуется 4 секунды. Делать это для 253 адресов медленно, как черт. Но у вас не было бы 253 устройств (возможно) меньше серверов HTTP. (или в вашем случае, телефоны)

Учитывая, что журналы маршрутизаторов - очень хорошая идея и легки. И даже быстрее, чем пинговать все. Некоторые маршрутизаторы даже не нуждаются в регистрации для доступа к ним.

Кроме того, стоит проверить, поддерживает ли ваше устройство поддержку UPNP. Если это так, вы можете использовать UPNP для обнаружения своего присутствия. Это будет официальное решение (прослушивание в эфир для UDPs UPNP). Но все устройства не поддерживают его. Но все устройства не поддерживают ICMP. (они не хотят, чтобы их бомбардировали бесполезно).

Есть еще одна интересная возможность. Вы можете ловить рыбу для пакетов DHCP и видеть, когда маршрутизатор передает новому устройству IP-адрес. Но это не будет работать для устройств со статическими IP-адресами. Они даже не дотронутся до сети, пока им не понадобится что-то. Подключение к самому Wi-Fi на другом уровне и не может быть легко обнаружено, если вы не хотите действовать как снифер. Я не уверен, даже если это возможно с сетевым адаптером в режиме promisquous. Я думаю, для этого потребуется дополнительное оборудование.

Чтобы выполнить ping в Python, без подпроцесса для ping-программы и потери скорости, вам необходимо создать raw-сокет и построить ICMP-пакет вручную. Это не сложно. Есть пример этого где-то в Интернете. Конечно, чтобы отправить его, вам понадобятся права root, как и ping. Это недостаток. Если вы будете распространять программное обеспечение, вы не можете ожидать, что пользователи захотят запустить его как root.

0
ответ дан 31 July 2018 в 11:12

Я действительно планирую реализовать решение для этого, отвечающее следующим требованиям:

  1. Телефон не должен иметь назначенный IP-адрес в сети.
  2. телефон не должен периодически посылать сигналы, которые могли бы разрядить его.
  3. Если в сети много телефонов, все они будут обнаружены.

My

Предположим, что локальная сеть - 192.168.1.0 ...

Итак, я бы использовал APP, чтобы установить файловую систему телефонов с помощью ssh, но она может быть использована для чего угодно.

который прослушивает широковещательные широковещательные рассылки UDP: 192.168.1.255. Это приложение не будет разряжать батарею, поскольку она полностью пассивна. (он активируется только при получении пакета).

Демон на компьютере будет периодически отправлять широковещательные сообщения на широковещательный адрес 192.168.1.255. Телефон ответит на такие сигналы, указав их имя, идентификатор, IP-адрес и т. Д.

Теперь компьютер знает, что телефон существует в сети, и мой случай может вызвать mount sshfs.

Конечно, это требует большой работы, включая работу по программированию, и нелегко. Но я думаю, что это будет самое надежное и разумное решение.

2
ответ дан 31 July 2018 в 11:12

Я думаю, что это можно легко выполнить с помощью arp-scan.

Установить arp-scan: sudo apt-get install arp-scan Обнаружение всех хостов в локальной сети: sudo arp-scan -l

Вы может периодически настраивать crontab (каждые 2 минуты) запустить сценарий, который сканирует сеть с помощью arp-scan и анализирует ее вывод, чтобы обнаружить активные хосты.

3
ответ дан 31 July 2018 в 11:12

Я написал сценарий, который делает что-то подобное, используя arp-scan и статический IP-адрес на iPhone.

Вы можете найти здесь код: https://github.com/blackairplane/pydetect

Его нужно очистить, поскольку я новичок в Python, но я думаю, что это иллюстрирует концепцию.

0
ответ дан 31 July 2018 в 11:12

Лучший способ, который я могу придумать, - дать указанному устройству статический IP-адрес и использовать простой скрипт для ping устройства каждые X секунд и запускать вашу программу / уведомление.

Замечания: Многие телефоны не будут подключаться к сети Wi-Fi, пока не проснутся от сна. Ваш скрипт должен будет определить разницу между телефоном, который будет спать, и телефоном, выходящим из дома, возможно, учитывая время суток. После этого, когда скрипт запускает программу для запуска или появляется уведомление, тривиально.

1
ответ дан 31 July 2018 в 11:12
import subprocess

if __name__ == '__main__':
    while True:
        sleep(5)
        p = subprocess.Popen("arp-scan -l | grep xx:xx:xx:xx:xx:xx", stdout=subprocess.PIPE, shell=True)
        (output, err) = p.communicate()
        p_status = p.wait()
        if output:
            print "Yay, the devine is connected to your network!"
        else:
            print "The device is not present!"

Таким образом, вы можете сканировать MAC-адрес устройства:)

3
ответ дан 31 July 2018 в 11:12

У меня было два решения, которые я использовал. (Python)

Решение 1

Сначала нужно было использовать известные ipnumbers, которые я хочу отслеживать. Я сделал это в три этапа. 1 # используйте «-c1», чтобы отправить только один пинг. Если устройство активно, оно ответит и. Функция будет успешно завершена. 2 # используйте «-c3», теперь дайте ей больше времени для ответа на один из трех. Обычно это достаточно, когда это плохой сигнал Wi-Fi. 3 # используйте «-c10», это может потребоваться, если это действительно плохой сигнал wifi. (Отмечено, что старый iPad нуждается в 10 попытках ответить). Чтобы ускорить работу, я создал отдельные Процессы для каждого номера ip, который я хочу отслеживать.

Я также изменил интервалы pinging в зависимости от успеха или нет. Если он найдет устройство, он будет ждать дольше, пока он не проверит еще раз. Если это сбой, он попытается снова через 60 секунд. (Я хочу включить свет, когда я войду в свой дом), поэтому достаточно 60 секунд, чтобы найти меня на улице

. Это сработало отлично! Когда я вернулся домой, он почувствовал меня и выключил свет, и выключился, когда я ушел.

Решение 2

Арпинг, возможно, не был тяжелым в сети, но я изменил решение, чтобы пропустить все пинги и создали мой собственный сервер DHCP на моем малине pi.

Затем я добавил «on commit», который запускает скрипт, как только устройство получает ipnumber. Этот скрипт использует «curl http API call» для уведомления моего www-сервера (Flask), как только устройство получает или обновляет его ipnumber.

На моем Android я изменил настройки, чтобы никогда не отключать Wi-Fi, когда экран выключен. Не уверен, возможно ли это на iPhone. Никакой большой разницы в батарее (OnePlus 5)

Первое решение также включало Bluetooth-сканирование для конкретного Mac. Поэтому, даже если мой WiFi отключен на моем телефоне, он все равно будет ощущать Bluetooth. Использование Mac-адреса не нужно связывать с ним или иметь его для просмотра всеми.

0
ответ дан 31 July 2018 в 12:13

Я наткнулся на это, и как-то я сделал что-то подобное, решив опубликовать ответ.

Я сделал следующее:

1. Ping all addresses within given network and subnet (excluding network and broadcast addresses)
2. Wait for response has a timeout so that if device doesn't answer from furthest corner of your WiFi it is considered not present.
3. So we get all IPs on the net that answer to ICMP packets.
4. Then use each detected IP to ask for more and decide which device you like and which one you don't.

В моем случае у меня был HTTP-сервер работает на моем устройстве. Поэтому я просто отправил HTTP HEAD-запрос практически ничего на порт 80. Если устройство ответило, и заголовок сервера правильно назван, то это мое устройство.

Но я не мог идти быстро, не пинговая первым. HTTP - это TCP, а запрос большой, поэтому для Wi-Fi требуется 4 секунды. Делать это для 253 адресов медленно, как черт. Но у вас не было бы 253 устройств (возможно) меньше серверов HTTP. (или в вашем случае, телефоны)

Учитывая, что журналы маршрутизаторов - очень хорошая идея и легки. И даже быстрее, чем пинговать все. Некоторые маршрутизаторы даже не нуждаются в регистрации для доступа к ним.

Кроме того, стоит проверить, поддерживает ли ваше устройство поддержку UPNP. Если это так, вы можете использовать UPNP для обнаружения своего присутствия. Это будет официальное решение (прослушивание в эфир для UDPs UPNP). Но все устройства не поддерживают его. Но все устройства не поддерживают ICMP. (они не хотят, чтобы их бомбардировали бесполезно).

Есть еще одна интересная возможность. Вы можете ловить рыбу для пакетов DHCP и видеть, когда маршрутизатор передает новому устройству IP-адрес. Но это не будет работать для устройств со статическими IP-адресами. Они даже не дотронутся до сети, пока им не понадобится что-то. Подключение к самому Wi-Fi на другом уровне и не может быть легко обнаружено, если вы не хотите действовать как снифер. Я не уверен, даже если это возможно с сетевым адаптером в режиме promisquous. Я думаю, для этого потребуется дополнительное оборудование.

Чтобы выполнить ping в Python, без подпроцесса для ping-программы и потери скорости, вам необходимо создать raw-сокет и построить ICMP-пакет вручную. Это не сложно. Есть пример этого где-то в Интернете. Конечно, чтобы отправить его, вам понадобятся права root, как и ping. Это недостаток. Если вы будете распространять программное обеспечение, вы не можете ожидать, что пользователи захотят запустить его как root.

0
ответ дан 31 July 2018 в 12:13

Я действительно планирую реализовать решение для этого, отвечающее следующим требованиям:

  1. Телефон не должен иметь назначенный IP-адрес в сети.
  2. телефон не должен периодически посылать сигналы, которые могли бы разрядить его.
  3. Если в сети много телефонов, все они будут обнаружены.

My

Предположим, что локальная сеть - 192.168.1.0 ...

Итак, я бы использовал APP, чтобы установить файловую систему телефонов с помощью ssh, но она может быть использована для чего угодно.

который прослушивает широковещательные широковещательные рассылки UDP: 192.168.1.255. Это приложение не будет разряжать батарею, поскольку она полностью пассивна. (он активируется только при получении пакета).

Демон на компьютере будет периодически отправлять широковещательные сообщения на широковещательный адрес 192.168.1.255. Телефон ответит на такие сигналы, указав их имя, идентификатор, IP-адрес и т. Д.

Теперь компьютер знает, что телефон существует в сети, и мой случай может вызвать mount sshfs.

Конечно, это требует большой работы, включая работу по программированию, и нелегко. Но я думаю, что это будет самое надежное и разумное решение.

2
ответ дан 31 July 2018 в 12:13

Я думаю, что это можно легко выполнить с помощью arp-scan.

Установить arp-scan: sudo apt-get install arp-scan Обнаружение всех хостов в локальной сети: sudo arp-scan -l

Вы может периодически настраивать crontab (каждые 2 минуты) запустить сценарий, который сканирует сеть с помощью arp-scan и анализирует ее вывод, чтобы обнаружить активные хосты.

3
ответ дан 31 July 2018 в 12:13

Я написал сценарий, который делает что-то подобное, используя arp-scan и статический IP-адрес на iPhone.

Вы можете найти здесь код: https://github.com/blackairplane/pydetect

Его нужно очистить, поскольку я новичок в Python, но я думаю, что это иллюстрирует концепцию.

0
ответ дан 31 July 2018 в 12:13

Лучший способ, который я могу придумать, - дать указанному устройству статический IP-адрес и использовать простой скрипт для ping устройства каждые X секунд и запускать вашу программу / уведомление.

Замечания: Многие телефоны не будут подключаться к сети Wi-Fi, пока не проснутся от сна. Ваш скрипт должен будет определить разницу между телефоном, который будет спать, и телефоном, выходящим из дома, возможно, учитывая время суток. После этого, когда скрипт запускает программу для запуска или появляется уведомление, тривиально.

1
ответ дан 31 July 2018 в 12:13
import subprocess

if __name__ == '__main__':
    while True:
        sleep(5)
        p = subprocess.Popen("arp-scan -l | grep xx:xx:xx:xx:xx:xx", stdout=subprocess.PIPE, shell=True)
        (output, err) = p.communicate()
        p_status = p.wait()
        if output:
            print "Yay, the devine is connected to your network!"
        else:
            print "The device is not present!"

Таким образом, вы можете сканировать MAC-адрес устройства:)

3
ответ дан 31 July 2018 в 12:13

У меня было два решения, которые я использовал. (Python)

Решение 1

Сначала нужно было использовать известные ipnumbers, которые я хочу отслеживать. Я сделал это в три этапа. 1 # используйте «-c1», чтобы отправить только один пинг. Если устройство активно, оно ответит и. Функция будет успешно завершена. 2 # используйте «-c3», теперь дайте ей больше времени для ответа на один из трех. Обычно это достаточно, когда это плохой сигнал Wi-Fi. 3 # используйте «-c10», это может потребоваться, если это действительно плохой сигнал wifi. (Отмечено, что старый iPad нуждается в 10 попытках ответить). Чтобы ускорить работу, я создал отдельные Процессы для каждого номера ip, который я хочу отслеживать.

Я также изменил интервалы pinging в зависимости от успеха или нет. Если он найдет устройство, он будет ждать дольше, пока он не проверит еще раз. Если это сбой, он попытается снова через 60 секунд. (Я хочу включить свет, когда я войду в свой дом), поэтому достаточно 60 секунд, чтобы найти меня на улице

. Это сработало отлично! Когда я вернулся домой, он почувствовал меня и выключил свет, и выключился, когда я ушел.

Решение 2

Арпинг, возможно, не был тяжелым в сети, но я изменил решение, чтобы пропустить все пинги и создали мой собственный сервер DHCP на моем малине pi.

Затем я добавил «on commit», который запускает скрипт, как только устройство получает ipnumber. Этот скрипт использует «curl http API call» для уведомления моего www-сервера (Flask), как только устройство получает или обновляет его ipnumber.

На моем Android я изменил настройки, чтобы никогда не отключать Wi-Fi, когда экран выключен. Не уверен, возможно ли это на iPhone. Никакой большой разницы в батарее (OnePlus 5)

Первое решение также включало Bluetooth-сканирование для конкретного Mac. Поэтому, даже если мой WiFi отключен на моем телефоне, он все равно будет ощущать Bluetooth. Использование Mac-адреса не нужно связывать с ним или иметь его для просмотра всеми.

0
ответ дан 2 August 2018 в 00:53

Я наткнулся на это, и как-то я сделал что-то подобное, решив опубликовать ответ.

Я сделал следующее:

1. Ping all addresses within given network and subnet (excluding network and broadcast addresses)
2. Wait for response has a timeout so that if device doesn't answer from furthest corner of your WiFi it is considered not present.
3. So we get all IPs on the net that answer to ICMP packets.
4. Then use each detected IP to ask for more and decide which device you like and which one you don't.

В моем случае у меня был HTTP-сервер работает на моем устройстве. Поэтому я просто отправил HTTP HEAD-запрос практически ничего на порт 80. Если устройство ответило, и заголовок сервера правильно назван, то это мое устройство.

Но я не мог идти быстро, не пинговая первым. HTTP - это TCP, а запрос большой, поэтому для Wi-Fi требуется 4 секунды. Делать это для 253 адресов медленно, как черт. Но у вас не было бы 253 устройств (возможно) меньше серверов HTTP. (или в вашем случае, телефоны)

Учитывая, что журналы маршрутизаторов - очень хорошая идея и легки. И даже быстрее, чем пинговать все. Некоторые маршрутизаторы даже не нуждаются в регистрации для доступа к ним.

Кроме того, стоит проверить, поддерживает ли ваше устройство поддержку UPNP. Если это так, вы можете использовать UPNP для обнаружения своего присутствия. Это будет официальное решение (прослушивание в эфир для UDPs UPNP). Но все устройства не поддерживают его. Но все устройства не поддерживают ICMP. (они не хотят, чтобы их бомбардировали бесполезно).

Есть еще одна интересная возможность. Вы можете ловить рыбу для пакетов DHCP и видеть, когда маршрутизатор передает новому устройству IP-адрес. Но это не будет работать для устройств со статическими IP-адресами. Они даже не дотронутся до сети, пока им не понадобится что-то. Подключение к самому Wi-Fi на другом уровне и не может быть легко обнаружено, если вы не хотите действовать как снифер. Я не уверен, даже если это возможно с сетевым адаптером в режиме promisquous. Я думаю, для этого потребуется дополнительное оборудование.

Чтобы выполнить ping в Python, без подпроцесса для ping-программы и потери скорости, вам необходимо создать raw-сокет и построить ICMP-пакет вручную. Это не сложно. Есть пример этого где-то в Интернете. Конечно, чтобы отправить его, вам понадобятся права root, как и ping. Это недостаток. Если вы будете распространять программное обеспечение, вы не можете ожидать, что пользователи захотят запустить его как root.

0
ответ дан 2 August 2018 в 00:53

Я действительно планирую реализовать решение для этого, отвечающее следующим требованиям:

  1. Телефон не должен иметь назначенный IP-адрес в сети.
  2. телефон не должен периодически посылать сигналы, которые могли бы разрядить его.
  3. Если в сети много телефонов, все они будут обнаружены.

My

Предположим, что локальная сеть - 192.168.1.0 ...

Итак, я бы использовал APP, чтобы установить файловую систему телефонов с помощью ssh, но она может быть использована для чего угодно.

который прослушивает широковещательные широковещательные рассылки UDP: 192.168.1.255. Это приложение не будет разряжать батарею, поскольку она полностью пассивна. (он активируется только при получении пакета).

Демон на компьютере будет периодически отправлять широковещательные сообщения на широковещательный адрес 192.168.1.255. Телефон ответит на такие сигналы, указав их имя, идентификатор, IP-адрес и т. Д.

Теперь компьютер знает, что телефон существует в сети, и мой случай может вызвать mount sshfs.

Конечно, это требует большой работы, включая работу по программированию, и нелегко. Но я думаю, что это будет самое надежное и разумное решение.

2
ответ дан 2 August 2018 в 00:53

Я думаю, что это можно легко выполнить с помощью arp-scan.

Установить arp-scan: sudo apt-get install arp-scan Обнаружение всех хостов в локальной сети: sudo arp-scan -l

Вы может периодически настраивать crontab (каждые 2 минуты) запустить сценарий, который сканирует сеть с помощью arp-scan и анализирует ее вывод, чтобы обнаружить активные хосты.

3
ответ дан 2 August 2018 в 00:53

Я написал сценарий, который делает что-то подобное, используя arp-scan и статический IP-адрес на iPhone.

Вы можете найти здесь код: https://github.com/blackairplane/pydetect

Его нужно очистить, поскольку я новичок в Python, но я думаю, что это иллюстрирует концепцию.

0
ответ дан 2 August 2018 в 00:53

Лучший способ, который я могу придумать, - дать указанному устройству статический IP-адрес и использовать простой скрипт для ping устройства каждые X секунд и запускать вашу программу / уведомление.

Замечания: Многие телефоны не будут подключаться к сети Wi-Fi, пока не проснутся от сна. Ваш скрипт должен будет определить разницу между телефоном, который будет спать, и телефоном, выходящим из дома, возможно, учитывая время суток. После этого, когда скрипт запускает программу для запуска или появляется уведомление, тривиально.

1
ответ дан 2 August 2018 в 00:53
import subprocess

if __name__ == '__main__':
    while True:
        sleep(5)
        p = subprocess.Popen("arp-scan -l | grep xx:xx:xx:xx:xx:xx", stdout=subprocess.PIPE, shell=True)
        (output, err) = p.communicate()
        p_status = p.wait()
        if output:
            print "Yay, the devine is connected to your network!"
        else:
            print "The device is not present!"

Таким образом, вы можете сканировать MAC-адрес устройства:)

3
ответ дан 2 August 2018 в 00:53

У меня было два решения, которые я использовал. (Python)

Решение 1

Сначала нужно было использовать известные ipnumbers, которые я хочу отслеживать. Я сделал это в три этапа. 1 # используйте «-c1», чтобы отправить только один пинг. Если устройство активно, оно ответит и. Функция будет успешно завершена. 2 # используйте «-c3», теперь дайте ей больше времени для ответа на один из трех. Обычно это достаточно, когда это плохой сигнал Wi-Fi. 3 # используйте «-c10», это может потребоваться, если это действительно плохой сигнал wifi. (Отмечено, что старый iPad нуждается в 10 попытках ответить). Чтобы ускорить работу, я создал отдельные Процессы для каждого номера ip, который я хочу отслеживать.

Я также изменил интервалы pinging в зависимости от успеха или нет. Если он найдет устройство, он будет ждать дольше, пока он не проверит еще раз. Если это сбой, он попытается снова через 60 секунд. (Я хочу включить свет, когда я войду в свой дом), поэтому достаточно 60 секунд, чтобы найти меня на улице

. Это сработало отлично! Когда я вернулся домой, он почувствовал меня и выключил свет, и выключился, когда я ушел.

Решение 2

Арпинг, возможно, не был тяжелым в сети, но я изменил решение, чтобы пропустить все пинги и создали мой собственный сервер DHCP на моем малине pi.

Затем я добавил «on commit», который запускает скрипт, как только устройство получает ipnumber. Этот скрипт использует «curl http API call» для уведомления моего www-сервера (Flask), как только устройство получает или обновляет его ipnumber.

На моем Android я изменил настройки, чтобы никогда не отключать Wi-Fi, когда экран выключен. Не уверен, возможно ли это на iPhone. Никакой большой разницы в батарее (OnePlus 5)

Первое решение также включало Bluetooth-сканирование для конкретного Mac. Поэтому, даже если мой WiFi отключен на моем телефоне, он все равно будет ощущать Bluetooth. Использование Mac-адреса не нужно связывать с ним или иметь его для просмотра всеми.

0
ответ дан 4 August 2018 в 16:24

Я наткнулся на это, и как-то я сделал что-то подобное, решив опубликовать ответ.

Я сделал следующее:

1. Ping all addresses within given network and subnet (excluding network and broadcast addresses)
2. Wait for response has a timeout so that if device doesn't answer from furthest corner of your WiFi it is considered not present.
3. So we get all IPs on the net that answer to ICMP packets.
4. Then use each detected IP to ask for more and decide which device you like and which one you don't.

В моем случае у меня был HTTP-сервер работает на моем устройстве. Поэтому я просто отправил HTTP HEAD-запрос практически ничего на порт 80. Если устройство ответило, и заголовок сервера правильно назван, то это мое устройство.

Но я не мог идти быстро, не пинговая первым. HTTP - это TCP, а запрос большой, поэтому для Wi-Fi требуется 4 секунды. Делать это для 253 адресов медленно, как черт. Но у вас не было бы 253 устройств (возможно) меньше серверов HTTP. (или в вашем случае, телефоны)

Учитывая, что журналы маршрутизаторов - очень хорошая идея и легки. И даже быстрее, чем пинговать все. Некоторые маршрутизаторы даже не нуждаются в регистрации для доступа к ним.

Кроме того, стоит проверить, поддерживает ли ваше устройство поддержку UPNP. Если это так, вы можете использовать UPNP для обнаружения своего присутствия. Это будет официальное решение (прослушивание в эфир для UDPs UPNP). Но все устройства не поддерживают его. Но все устройства не поддерживают ICMP. (они не хотят, чтобы их бомбардировали бесполезно).

Есть еще одна интересная возможность. Вы можете ловить рыбу для пакетов DHCP и видеть, когда маршрутизатор передает новому устройству IP-адрес. Но это не будет работать для устройств со статическими IP-адресами. Они даже не дотронутся до сети, пока им не понадобится что-то. Подключение к самому Wi-Fi на другом уровне и не может быть легко обнаружено, если вы не хотите действовать как снифер. Я не уверен, даже если это возможно с сетевым адаптером в режиме promisquous. Я думаю, для этого потребуется дополнительное оборудование.

Чтобы выполнить ping в Python, без подпроцесса для ping-программы и потери скорости, вам необходимо создать raw-сокет и построить ICMP-пакет вручную. Это не сложно. Есть пример этого где-то в Интернете. Конечно, чтобы отправить его, вам понадобятся права root, как и ping. Это недостаток. Если вы будете распространять программное обеспечение, вы не можете ожидать, что пользователи захотят запустить его как root.

0
ответ дан 4 August 2018 в 16:24

Другие вопросы по тегам:

Похожие вопросы: