Saltar al contenido

Tratando de descubrir dispositivos iOS en mi red usando un script de Python

Este grupo de redactores ha estado por horas investigando soluciones a tus preguntas, te compartimos la solución así que deseamos servirte de mucha ayuda.

Solución:

Lo que está tratando de hacer (a) probablemente no se pueda hacer, y (b) probablemente no sería de mucha utilidad si pudiera.

El objetivo de Bonjour es descubrir servicios, no dispositivos. Por supuesto, cada servicio lo proporciona algún dispositivo, por lo que indirectamente puede descubrir dispositivos con él … pero solo descubriendo un servicio que están anunciando.

Hasta donde yo sé, (excepto los televisores Apple) no anuncian ningún servicio, excepto mientras está ejecutando una aplicación que usa Bonjour para encontrar la misma aplicación en otras máquinas. (A excepción de los dispositivos con jailbreak, que a menudo anuncian SSH, AFP, etc.)

Hay algunas formas de, indirectamente, obtener una lista de todos los servicios que anuncia cualquier persona en la red. Probablemente, la más sencilla sea utilizar Bonjour Browser para Windows. (En realidad, nunca lo he usado, pero la herramienta original de Mac y el puerto de Java, los cuales tengo usado, ambos sugieren este puerto de Windows para usuarios de Windows. Enciéndalo y obtendrá una lista de servicios, y puede hacer clic en cada uno para obtener los detalles.

Por lo tanto, puede verificar que su iPhone y iPad no estén anunciando ningún servicio, lo que mostrará que no hay forma de detectarlos a través de Bonjour.

Mientras tanto, incluso si hizo encontrar un dispositivo, ¿qué planeas hacer? Presumiblemente, desea comunicarse con el dispositivo de alguna manera, ¿verdad? Sea cual sea el servicio con el que intenta comunicarse … simplemente busque ese servicio y luego, si corresponde, filtre a dispositivos iOS. Eso tiene que ser más fácil que buscar dispositivos iOS y luego filtrar a aquellos que tienen el servicio que desea.


En cuanto a si hay alguna forma de detectar dispositivos iOS … Bueno, hay al menos dos posibilidades. No sé si alguno de ellos funcionará, pero …

Primero, incluso si el dispositivo iOS no está anunciando nada para usted, supongo que está buscando servicios. usted puede anunciar. ¿De qué otra manera encuentra que hay un Apple TV para AirTunes, un iTunes en la LAN para sincronizar, etc.?

Por lo tanto, use Bonjour Browser para obtener una lista de todos los servicios que anuncia su computadora de escritorio con iTunes, Apple TV, etc. Luego apague todos los servicios en su escritorio, use PyBonjour para anunciar los servicios que parezcan plausiblemente relevantes (y, si es necesario, use netcat para poner oyentes triviales en los puertos que anuncia). Luego encienda su iPhone y vea si se conecta a alguno de ellos. Es posible que desee dejarlo funcionando durante un tiempo o apagar y volver a encender el WiFi. (Supongo que, a pesar de las recomendaciones de Apple, no busca continuamente la mayoría de los servicios, sino que solo comprueba de vez en cuando y / o cada vez que cambia el estado de su red. Después de todo, las recomendaciones de Apple son para aplicaciones interactivas en primer plano, no servicios en segundo plano.)

Desafortunadamente, incluso si puede encontrar un servicio al que se conectarán todos los dispositivos iOS, es posible que no pueda distinguir los dispositivos iOS de otros con solo obtener conexiones allí. Por ejemplo, estoy bastante seguro de que cualquier Mac o Windows que ejecute iTunes activará su servicio falso de AirTunes, y cualquier Mac activará su AirPrint, y así sucesivamente. Entonces, ¿cómo se distingue eso de un iPhone que lo golpea? Es posible que deba servir suficiente parte del protocolo para obtener información de ellos. Lo que será particularmente difícil para los protocolos indocumentados de Apple.

Pero, con suerte, tendrás suerte y habrá algo con lo que todos los dispositivos iOS, y nada más, querrán hablar. iTunes Sync parece la posibilidad obvia.

Alternativamente, hay algunas cosas que tengo para transmitir, o simplemente no funcionarían. No puede conectarse a una red WiFi sin transmisiones. Y la mayoría de las redes WiFi domésticas utilizan DHCP, lo que significa que también tienen que transmitir el descubrimiento (y la solicitud) de DHCP. Puede haber algún tipo de firma heurística que pueda detectar en estos mensajes. Por lo menos, habilitar DDNS debería hacer que el dispositivo envíe su nombre de host, y puede adivinar en base a eso (por ejemplo, a menos que cambie los valores predeterminados, hostname.lower().endswith('iphone')).

Probablemente, la forma más sencilla sea configurar su escritorio como el punto de acceso principal para su red doméstica. Creo que es tan simple como activar Conexión compartida a Internet en algún lugar del panel de control. (La configuración como un agente de retransmisión DHCP es mucho menos costosa que ser un enrutador completo, pero no tengo idea de cómo comenzaría a hacerlo en Windows). Luego, puede capturar las transmisiones DHCP (o, en su defecto, el 802.11 broadcasts) a medida que llegan. Wireshark capturará y analizará los mensajes por usted fácilmente, para que pueda ver y ver si parece que vale la pena seguir adelante. (Consulte RFC 2131 para obtener detalles sobre el formato que no son obvios a partir de las crípticas descripciones de una sola línea de Wireshark).

Puede llevar esto aún más lejos y ver las conexiones a Internet que cada host hace una vez que están conectados a Internet. Cualquier dispositivo que esté revisando periódicamente la App Store, el servidor de actualización de iOS, etc.… Bueno, a menos que uno de los tipos de jailbreak devteam viva en tu casa, probablemente sea un iPhone, ¿verdad? La desventaja es que algunos de estos controles pueden muy periódico, y detectar un iPhone 6 horas después de que se conecta a su red no es muy emocionante.

Utilice python-nmap en lugar de Bonjour. O podría usar pyzeroconf (Bonjour es una implementación de zeroconf) pero está un poco desactualizado (pero aún debería funcionar).

python-nmap es probablemente más fácil, supongamos que desea encontrar todos los dispositivos conectados que tienen ‘iPhone’ o ‘iPad’ en su nombre de host (solo un simplista concepto):

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

La limitación de este enfoque es que se basa en que la persona no haya cambiado su nombre de host, que originalmente incluye su nombre y el nombre del dispositivo. También asume que hay un puerto escuchando en el dispositivo iOS que devolverá un nombre de host (este puede no ser el caso). Puedes usar osscan que se prefiere ejecutándolo como un comando usando la biblioteca python-nmap. Obviamente, este es un enfoque mucho mejor. Mi concepto anterior es solo un ejemplo simple de cómo se puede usar.

Usando nmap desde la línea de comando (creo que python-nmap tiene nm.commandline() método) es el más simple:

nmap -O -v ip

También intente agregar --osscan-guess; --fuzzy para mejores resultados. Ejemplo:

nmap -O -v --osscan-guess ip

Luego, busque la salida para palabras clave de dispositivos iOS (vea este ejemplo). Es legible por humanos. Tenga en cuenta que deberá ejecutar todo esto como administrador para que funcione correctamente (Windows: runas, otro: sudo).

Recuerda algo, que tienes la capacidad de aclarar tu experiencia si diste con el resultado.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *