Как определить iPhone в сети?

Я пытаюсь определить, находится ли мой iPhone в той же сети, что и моя малина Pi. Я хотел бы выполнить script, когда я дома, и мое присутствие в iPhone зарегистрировано в моей локальной сети.

Похоже, что когда телефон находится в режиме ожидания, не обнаружен даже порт iphone-sync (6207/tcp). "/usr/bin/nmap -n -sT -p62078 [мой телефон локальный IP]" не показывает хост. Интересно, что еще я мог отсканировать. Очевидно, что телефон подключен к сети и готов принимать факс-звонки (данные через 3G деактивируются). Могу ли я что-то сделать с avahi, который я использую на малине Pi, или есть другие способы.

Ответ 1

Вы можете найти список устройств в своей сети, исследуя кеш arp.

arp -a

Просто напишите bash script для запуска arp -a с регулярным интервалом и найдите адрес mac вашего телефона.

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

Первые три шестнадцатеричные цифры адреса mac - это идентификатор поставщика.

Возьмите следующий адрес mac:

00:19:E3:AB:CD:EF

00:19:E3: - один из зарегистрированных MAC-адресов для устройств Apple.

Сравнив устройства в вашей сети с этот список, вы можете обнаружить, например, например, устройство "3com" или "dell", устройство подключается к вашей сети.

http://www.coffer.com/mac_find/?string=apple

Ответ 2

Вы можете сделать "arp-scan -l -r10" для этого (протестировали это самостоятельно), но проблема в том, что мобильные данные позволили iphone пойти и приостановить Wi-Fi, если экран заблокирован для безопасной батареи. поэтому вам нужно отключить мобильные данные.. тогда будет работать arp-scan.

Ответ 3

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

Pinging не будет работать, потому что iPhone не будет реагировать на ICMP при спящем режиме. Чтение кеша ARP не будет работать, потому что спящий iPhone придет и уйдет (проверьте его каждые 30 секунд в течение нескольких минут).

Единственный способ, который я нашел "надежно", определить, когда мои два iPhone находятся в моей локальной (домашней) сети, - это использовать библиотеку dotnet для PCAP для поиска любых пакетов, исходящих из любого из MAC-адресов телефонов. Например, если вы запустите Wireshark с фильтром захвата

ether src <iphone-mac-address>

вы увидите удивительный объем трафика обнаружения/анонса сети с телефона. У него все еще есть состояния покоя, но до сих пор самый длинный интервал, который я видел между захваченными пакетами, составляет около 10 минут. Вам придется подождать, пока вы не услышите от телефона какое-то время (я использую 15 минут), прежде чем объявлять его не дома.

С помощью этой техники вы быстро найдете телефон, когда он подключится к домашней сети, при условии, что ваш телефон настроен для DHCP. Я также использую зеркалирование портов на моем основном коммутаторе Ethernet, чтобы включить трафик из моих беспроводных точек доступа.

У меня нет решения Raspberry Pi для этого, потому что мой опыт Linux очень ограничен, но кто-то может помочь вам в этом. У меня есть служба Windows, использующая библиотеку PCAP, и до сих пор она работает надежно, с ограничением ожидания 15 минут, прежде чем решить, что iPhone покинул сеть.

* обновление 2-3-2018 *

У меня есть этот алгоритм обнаружения примерно до 5 минут, используя комбинацию сообщений ping/arp, направленных на каждый телефон, примерно один раз в минуту. Кажется, отлично работает.