у меня есть сервер дебиан. Этот сервер должен проверять, доступны ли iPhone в моем домашнем Wi-Fi. Проблема в том, что i-Devices приостанавливают работу модуля Wi-Fi для безопасного питания, если доступны мобильные данные. Итак, одно из решений — просто отключить мобильные данные, и обнаружение в Wi-Fi будет работать нормально. (Но это не реальное решение для меня, потому что это раздражает делать это вручную каждый раз, когда вы дома, и другие люди тоже будут использовать это программное обеспечение.)
На данный момент протестировано с iPad Mini и iPhone5 (ios7):
Я выполнил задачу для Android, в Android есть трансляция, если у меня изменится подключение к сети, поэтому мне просто нужно поймать трансляцию программно и зарегистрировать меня на моем Debianbox. Пробовал то же самое на iDevice, но, похоже, невозможно перехватить изменения состояния Wi-Fi в Objective-C в фоновом режиме. На переднем плане это возможно через Apple-Reachability-Class. Но мне это нужно в фоновом режиме, поэтому для меня это невозможно.
Просканируйте все порты моего iPhone и попробуйте выполнить запросы в надежде, что это разбудит мой Wi-Fi-модуль:
Открытые UDP-порты:
- PORT STATE SERVICE VERSION
- 999/udp открытое|отфильтрованное приложение
- 1090/udp открытый|отфильтрованный ff-fms
- 5001/udp open|отфильтрованная комплексная ссылка
- 5353/udp open|отфильтровано zeroconf
- 18134/udp открыто|отфильтровано неизвестно
- 19141/udp открыто|отфильтровано неизвестно
- 19717/udp открыто|отфильтровано неизвестно
- 20919/udp открыто|отфильтровано неизвестно
- 21354/udp открыто|отфильтровано неизвестно
- 31625/udp открыто|отфильтровано неизвестно
- 49191/udp открыто|отфильтровано неизвестно
- 57409/udp открыто|отфильтровано неизвестно
Открытые порты TCP:
- PORT STATE SERVICE VERSION
- 62078/tcp открыть TCPWrapped
Я пытался делать запросы с помощью netcat через порт 5353 UDP (Bonjour/MDNS). В результате iDevices действительно будит модуль Wi-Fi в первые 30 минут! По истечении этого периода времени это своего рода удача, если запрос разбудит модуль Wi-Fi. Я думаю, что примерно через 30 минут наступает «глубокий сон».
MacBookPro как точка доступа Wi-Fi и iDevices, подключенные к ней. Затем я пронюхал весь трафик с помощью Wireshark, чтобы проверить, какие сообщения отправляются через Wi-Fi. По крайней мере, нашел многоадресную рассылку MDNS, которая выполняется каждым устройством iOS7. Эти сообщения могут быть перехвачены небольшим сервером Python. -> Работает, но период, когда устройства отправляют многоадресные рассылки, составляет от 1 до 30+ минут, так что это ненадежно.
Креативный способ: Silent Push Notification для пробуждения iDevice, после чего возможен пинг в wifi. Так что push-уведомление просто разбудит мой Wi-Fi! -> Работает, но сервер APN не сообщает вам, было ли доставлено push-сообщение, так что это не очень надежно. Я проверил это, и несколько раз сервер APN «проглатывал» сообщение. И каждые 5 минут интернет-соединение и мобильный трафик данных, чтобы проверить, подключено ли мое устройство к Wi-Fi ... это не совсем лучшая практика. Но пока лучшее решение для автономной работы.
Триггер, что вы находитесь дома с регионом геозоны. Это возможно, и работает, но стоит столько батареи. Но, возможно, нет другого хорошего решения.
arp-scan — это инструмент, который делает arp-запрос к диапазону IP-адресов. Это не работает, если мобильные данные включены, иначе работает.
Итак, мои вопросы:
- Есть ли запрос на определенный порт, который я могу отправить, чтобы разбудить Wi-Fi-модуль iDevice?
- Может быть, есть объективный способ решить эту задачу?
- Могу ли я отправить запрос MDNS, и iDevice ответит на него?
- Могу ли я создать приложение с сокетом для фонового прослушивания, к которому подключается Debianbox?
- Любые другие идеи, которые могут решить эту задачу? У меня нет идей.
Спасибо