То, что вы пытаетесь сделать (а), вероятно, не может быть сделано, и (б), вероятно, было бы не очень полезно, если бы это было возможно.
Пункт Bonjour состоит в том, чтобы открыть услуги, а не устройства. Конечно, каждая услуга предоставляется некоторым устройством, поэтому косвенно вы можете обнаруживать устройства с ней ... но только путем обнаружения службы, которую они рекламируют.
Насколько я знаю (кроме Apple TV), не рекламируйте какие-либо сервисы, кроме случаев, когда вы используете приложение, которое использует Bonjour для поиска того же приложения на других компьютерах. (За исключением вредоносных устройств, которые часто рекламируют SSH, AFP и т. Д.)
Существует несколько способов, чтобы косвенно получить список всех услуг, рекламируемых кем-либо в сети. Простейшим, вероятно, является использование Bonjour Browser for Windows. (Я никогда не использовал его, но оригинальный инструмент для Mac и порт Java, оба из которых имеют , имеют, оба предлагают этот порт Windows для пользователей Windows.) Запустите его, и вы получите список услуг , и вы можете щелкнуть по каждому из них, чтобы получить детали.
Итак, вы можете проверить, что ваш iPhone и iPad не рекламируют какие-либо услуги, что покажет, что их невозможно обнаружить через Bonjour.
Между тем, даже если вы сделали найти устройство, что вы планируете делать? Предположительно, вы хотите каким-то образом связаться с устройством, верно? Независимо от службы, с которой вы пытаетесь связаться ... просто просмотрите эту службу, а затем, при необходимости, отфильтруйте до iOS-устройств. Это должно быть проще, чем просмотр устройств iOS, а затем фильтрация до тех, которые вам нужны.
Что касается того, там любого способа обнаружения IOS устройств ... Ну, есть, по крайней мере, две возможности. Я не знаю, будет ли любой из них работать, но ...
Во-первых, даже если устройство iOS ничего не рекламирует для вас, я предполагаю, что он просматривает услуги , которые вы можете рекламировать. Как еще это найти, что есть Apple TV для AirTunes, iTunes в локальной сети для синхронизации и т. Д.?
Итак, используйте Bonjour Browser, чтобы получить список всех сервисов, на которых работает ваш рабочий стол iTunes, Apple TV и т. Д.. Затем отключите все службы на вашем рабочем столе, используйте PyBonjour для рекламы того, какие службы кажутся правдоподобными (и, если необходимо, используйте netcat для размещения тривиальных слушателей в портах, которые вы рекламируете). Затем включите свой iPhone и посмотрите, подключается ли он к любому из них. Возможно, вам захочется оставить его на некоторое время или отключить WiFi и снова включить WiFi.(Я предполагаю, что, несмотря на рекомендации Apple, он не просматривается постоянно для большинства служб, а просто проверяет каждый раз в то время и/или каждый раз, когда изменяется его статус сети. В конце концов, рекомендации Apple предназначены для интерактивных приложений переднего плана, а не фоновые сервисы.)
К сожалению, даже если вы можете найти службу, к которой будут подключены все устройства iOS, вы не сможете отличить устройства iOS от других, просто получая там соединения. Например, я уверен, что любой Mac или Windows, в котором установлен iTunes, поднимет ваш поддельный сервис AirTunes, и любой Mac попадет в ваш AirPrint и так далее. Итак, как вы отличаете это от того, что iPhone ударил его? Возможно, вам понадобится фактически выполнить достаточно протокола, чтобы получить информацию из них. Это будет особенно сложно для недокументированных протоколов Apple.
Но, надеюсь, вам повезет, и будет что-то, с чем захотят поговорить все устройства iOS и ничего другого. iTunes Sync кажется очевидной возможностью.
Альтернативно, есть несколько вещей, которые у них есть для трансляции, или они просто не сработают. Вы не можете попасть в сеть WiFi без трансляций. И большинство домашних сетей Wi-Fi используют DHCP, а это значит, что они также должны транслировать DHCP-обнаружение (и запрос). В этих сообщениях может быть какая-то эвристическая подпись. Если ничего другого, включение DDNS должно заставить устройство отправлять свое имя хоста, и вы можете угадать на основе этого (например, если вы не измените значения по умолчанию, hostname.lower().endswith('iphone')
).
Самый простой способ - это, вероятно, настроить рабочий стол в качестве основной точки доступа для вашей домашней сети. Я считаю, что это так же просто, как включение доступа к подключению к Интернету где-то в панели управления. (Настройка агента ретрансляции DHCP намного меньше, чем полный маршрутизатор, но я понятия не имею, как вы даже начинаете делать это в Windows.) Затем вы можете захватывать широковещательные передачи DHCP (или, в противном случае, 802.11), когда они входят. Wireshark легко захватывает и анализирует сообщения, поэтому вы можете смотреть и посмотреть, похоже ли это, что это стоит продолжать. (См. RFC 2131 для получения подробной информации о формате, который не очевиден в описаниях криптографических однострочных устройств от Wireshark.)
Вы можете принять это еще дальше и посмотреть интернет-соединения, которые каждый хост делает, когда они подключены к Интернету. Любое устройство, которое периодически проверяет App Store, сервер обновления iOS и т. Д. ... Ну, если в вашем доме живет один из джейлбрейка devteam, это, вероятно, iPhone, верно? Недостатком является то, что некоторые из этих проверок могут быть очень периодическими, и обнаружение iPhone через 6 часов после его подключения к вашей сети не очень интересно.
Во-первых, вы установили Bonjour для Windows, правильно? – abarnert
yep. Думаю, у меня это есть. Устали несколько других команд вроде. python browse_and_resolve.py _airplay._tcp, и это обнаружило мое яблочное телевидение –
Между тем, точка Bonjour заключается в том, чтобы обнаружить _services_, а не _devices_. Что бы вы сделали с устройствами, если бы обнаружили? Ответ на это должен рассказать вам, какую услугу вы планируете использовать, что говорит вам, какую услугу следует искать. Например, если вы хотите использовать 'ssh' для любых jailbroken iPhones в вашей локальной сети, просмотрите' _ssh._tcp'. – abarnert