2013-05-10 3 views
6

Попытка использовать pybonjour, но не уверен, что это то, что мне нужно. https://code.google.com/p/pybonjour/Попытка открыть устройства iOS в моей сети, используя скрипт python

Я хочу, чтобы иметь возможность открывать устройства iOS, которые появляются в моей сети автоматически, будет запущен сценарий позже на основе этого, но сначала я хочу просто открыть устройства iOS, как только он появится/исчезнет на моя сеть Wi-Fi.

Итак, вопрос, как мне это сделать? на компьютере с Windows с python27 и пакетом pybonjour эти два примера работают на странице pybonjour, но какую команду я запускаю для обнаружения устройств iOS с использованием сценариев, включенных в мою сеть? или будут ли это только службы обнаружения, запущенные на моем компьютере, чтобы я запускал этот скрипт!

Если я собираюсь в неправильном направлении, пожалуйста, дайте мне знать, я не могу найти документацию на этом пакете!

python browse_and_resolve.py xxxxxx 

Thx Matt.

Update ...

Эта статья и браузер был полезным, http://marknelson.us/2011/10/25/dns-service-discovery-on-windows/ в поиске услуг мне нужно искать.

пример; (Это обнаружило мои яблочный телевизор, а не дома атм поэтому не может проверить, что называется iphone! Я предполагаю, что Iphone!

python browse_and_resolve.py _appletv._tcp 

Кроме того, если у вас есть окна утилита ДНС-sd.exe это будет искать все . услуги, доступные в сети, я использовал это, чтобы найти то, что я искал

dns-sd -B _services._dns-sd._udp 

Update ...

«Bonjour используется двумя способами: -. издательство услуги - обнаруживая (просмотр для) имеющиеся услуги ".

Для того, что я хочу сделать, я не думаю, что это будет работать, поскольку ipad/iPhone не будет рекламировать сервис, если я не запускаю приложение, которое рекламирует один (или джейлбрейк, мой iPhone/ipad, а затем ssh будет открытый). Есть еще идеи?

+0

Во-первых, вы установили Bonjour для Windows, правильно? – abarnert

+0

yep. Думаю, у меня это есть. Устали несколько других команд вроде. python browse_and_resolve.py _airplay._tcp, и это обнаружило мое яблочное телевидение –

+1

Между тем, точка Bonjour заключается в том, чтобы обнаружить _services_, а не _devices_. Что бы вы сделали с устройствами, если бы обнаружили? Ответ на это должен рассказать вам, какую услугу вы планируете использовать, что говорит вам, какую услугу следует искать. Например, если вы хотите использовать 'ssh' для любых jailbroken iPhones в вашей локальной сети, просмотрите' _ssh._tcp'. – abarnert

ответ

4

То, что вы пытаетесь сделать (а), вероятно, не может быть сделано, и (б), вероятно, было бы не очень полезно, если бы это было возможно.

Пункт 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 часов после его подключения к вашей сети не очень интересно.

+0

Thx, просто пытается обнаружить, когда человек дома или нет, используя там iPhone. Затем я запускаю скрипты на основе этого на моем сервере. Будет хорошо смотреть на все варианты по утрам. –

+0

Да, думал, что увидит в крайнем случае. –

+0

Не удается побег из тюрьмы, работает последняя ОС. –

3

Используйте python-nmap, а не Bonjour. Или вы можете использовать pyzeroconf (Bonjour - реализация zeroconf), но он немного устарел (но должен все еще работать).

питон-птар, вероятно, проще всего, давайте предположим, что вы хотите найти все подключенные устройства, которые имеют «iPhone» или «IPad» в их имени хоста (просто упрощенного концепции):

import nmap 

... 

def notify_me(ip, hostname): 
    print("I found an iOS device! IP Address: %s, Hostname: %s" % (ip, hostname)) 

iOS_device_list = ['iPhone', 'iPad'] 
iOS_devices_on_net = {} 
nm = nmap.PortScanner() 

# scan ip range 
for i in range(2, 50, 1): 
    ip = "192.168.1." + str(i) 
    # specify ports to scan 
    nm.scan(ip, '62078') # Matt mentioned that it picks up iphone-sync on this port 
    hostname = nm[ip].hostname() 
    for device in iOS_device_list: 
    if device.lower() in hostname.lower(): 
     iOS_devices_on_net.update({ip:hostname}) 
     notify_me(ip, hostname) 

# show all iOS devices in ip range 
print iOS_devices_on_net 

лимитационный этого подхода заключается в том, что он полагается на человека, который не изменил свое имя хоста, которое первоначально включало их имя и имя устройства. Он также предполагает, что на устройстве iOS есть порт, который будет возвращать имя хоста (это может быть не так). Вы можете использовать osscan, что предпочтительнее, запустив его как команду, используя библиотеку python-nmap. Это, безусловно, гораздо лучший подход. Моя концепция выше - просто простой пример того, как ее можно использовать.

Использование Nmap из командной строки (я считаю, питон-птар имеет nm.commandline() метод) является простейшим:

nmap -O -v ip 

попробовать также добавление --osscan-guess; --fuzzy для достижения наилучших результатов. Пример:

nmap -O -v --osscan-guess ip 

Тогда просто искать выход для ключевых устройств IOS (см this example). Это понятно для человека. Обратите внимание, что вам нужно будет запустить все это как администратор, чтобы он работал правильно (Windows: runas, другое: sudo).

+0

Я уверен, что вам нужно «сканировать» каждый IP до того, как 'nm [ip]' будет работать. И, конечно же, вы должны сканировать правильные порты, чтобы угадать имя хоста, которое ... Я не уверен, какие порты вы можете получить от того, что iPhone будет открыт. – abarnert

+0

@abarnert, вы правы, я написал это с головы. Обновленный ответ – Dan

+0

Это решает первую проблему. И дополнительный бит о '-O' хорош (но вы можете добавить' --osscan-guess' или '--fuzzy' в вашу строку' -O'). Но все-таки, у iPhone есть какие-либо открытые порты в диапазоне 22-443? Если нет, для 'nmap' нет ничего (кроме, может быть, времени). (Кроме того, ни пример, который вы даете, ни документы, которые он связывает, чтобы показать ключевые слова для iOS ..., но вы можете решить это, просто запустив его против iPhone и увидев строку, вручную не разбирать вручную.) – abarnert