2 votos

¿Cómo hacer que el dispositivo Android sea visible para Bonjour / Zeroconf con el nombre .local?

Me gustaría acceder a mi dispositivo como myandroidthing.local , ya que puedo hacerlo con mis portátiles (tanto Linux como Windows). ¿Es posible de alguna manera?

Lo más ideal es que se pueda hacer con alguna aplicación que pueda instalar desde una tienda de aplicaciones.

Respuestas a la respuesta:

  • Android.local obras. Pero sólo encuentra uno de mis dispositivos Android. ¿Hay alguna manera de reemplazar el Android mdsnd con una mejor configurable que permita cambiar el nombre que anuncia?
  • ¿Realiza un parcheado mdnsd ¿necesita un dispositivo rooteado?

0 votos

0 votos

@IrfanLatif Gracias, me ha ayudado mucho. Veo muchas aplicaciones para escanear mdns / dns-sd, pero ninguna que pueda hacer visible mi teléfono. Eso me parece bastante sorprendente - si puede enviar paquetes udp a 224.0.0.251:5353, ¿por qué no puede responder a otros?

0 votos

No he utilizado mucho el MDNS salvo para aprender, así que no puedo recomendar una aplicación. Pero en lo que respecta a la API oficial de Android está documentado, es muy simple de difundir su servicio así como a descubra otros servicios . También hay bibliotecas de terceros disponibles como jmdns . Esta aplicación de ejemplo demuestra las posibilidades con mucho detalle.

4voto

Jack Wade Puntos 231

Mi respuesta a ¿Por qué "mdnsd" consume mi batería y cómo detenerlo? explica el papel del demonio mDNS de Android, que es un init servicio, iniciado bajo demanda. Proporciona DNS multidifusión (resolución de nombres de host/dominio) y DNS-SD (DNS-Based Service Discovery); ambos forman parte de Red de configuración cero .

¿Cómo resolver el nombre de host mDNS de Android a la dirección IP?

Técnicamente es posible que DNS-SD utilice el antiguo DNS unicast para resolver el nombre de dominio encontrado en el registro SRV (de un servicio difundido) a una dirección IP. Pero la mayoría de las veces mDNS y DNS-SD están vinculados entre sí. Y este es el caso de Android.

Android no expone ningún ajuste o API para hacer sólo la resolución del nombre (como mDNS Responder o Querier) y no el descubrimiento del servicio. Ni el mecanismo de resolución de nombres utiliza mDNS. Android's mdnsd sirve como emisor/respondedor de mDNS sólo para el servicio DNS-SD. No se puede utilizar ninguno de los dos de forma independiente (que yo sepa).

Pero hay algunas opciones:

  • Ejecuta una aplicación en tu dispositivo Android con un servicio descubrible (aunque sea ficticio), que utiliza la API oficial de Android (que a su vez interactúa con mdnsd por debajo) a emitir y descubra servicios. Así, cualquier otro host de la red local con capacidad mDNS/DNS-SD puede descubrir el servicio. Por ejemplo, utilice avahi-browse en un sistema Linux. La resolución del servicio proporciona la dirección IP del dispositivo Android.

  • Cuando mdnsd se está ejecutando, el dispositivo Android ya se está transmitiendo con un nombre codificado : Android.local . Si no quieres difundir un servicio, hay otra opción.

    ADB se basa en mDNS para descubrir dispositivos en la red local mediante el registro de un servicio de tipo _adb._tcp (ver referencias aquí , aquí y aquí ). Así que activa la "Depuración USB" en las Opciones de Desarrollador y verás mdnsd que se ejecuta en su dispositivo.

    O en un dispositivo rooteado iniciar mdnsd solo, sin iniciar ADB, ejecutando setprop ctl.start mdnsd o simplemente start mdnsd .

En los dos casos anteriores, cuando mdnsd está en marcha, ejecutando avahi-resolve-host-name Android.local en un PC Linux debería devolver la dirección IP de su dispositivo Android.

¿Qué pasa si dos dispositivos Android tienen el mismo nombre de host?

En caso de conflicto de nombres, como el nombre Android.local está codificado, el dispositivo Android que se une más tarde se renombra automáticamente como Android-2.lcoal , Android-3.local y así sucesivamente (véase la referencia aquí ). Así que puede resolver los nombres en consecuencia.

¿Hay alguna opción para cambiar el nombre de host mDNS?

Llegando al siguiente problema, ¿qué pasa si el desarrollador de su OEM/ROM eliminó o modificó el mdnsd o si desea ejecutar con un nombre de su elección, no el codificado?

  • Construya y ejecute su propia respuesta mDNS más configurable como Avahi en el dispositivo Android.

  • Más sencillo aún, parchear y reconstruir la mdnsd para recibir un argumento de línea de comandos para el nombre, o leer de un archivo de configuración si existe.

    No, no necesita un dispositivo rooteado. El parcheado mdnsd binario debería funcionar bien desde adb shell o incluso en una aplicación de emulador de terminal como Termux. En el momento de escribir esto, sólo hay una llamada al sistema en mdnsd código fuente que el seccomp bloques para aplicaciones. Pero se puede eliminar fácilmente. Ni el DAC ni el MAC bloquean la ejecución.

1 votos

Hehh, ¡muy gracioso! Android.local funciona. El problema es que sólo encuentra uno de mis Androids... de alguna manera tengo que cambiar el nombre que anuncia.

0 votos

Gracias. Lamentablemente, en la fuente se ve claramente que no hay forma de cambiarlo. Siguiente pregunta, ¿hay una manera de reemplazar el mdsnd de Android con una mejor configurable.

0 votos

La forma más sencilla es parchear y reconstruir el sistema operativo de Android mdnsd para recibir un argumento de línea de comandos para el nombre, o leer de un archivo de configuración si existe.

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X