4 votes

Comment rendre un appareil Android visible pour Bonjour / Zeroconf avec un nom .local?

Je voudrais accéder à mon appareil en tant que myandroidthing.local, car je peux le faire avec mes ordinateurs portables (Linux et Windows). Est-ce possible d'une quelconque manière ?

Idéalement, cela pourrait être fait par une application que je pourrais installer depuis un magasin d'applications.

Réponses à la réponse :

  • Android.local fonctionne. Mais il ne trouve qu'un seul de mes appareils Android. Y a-t-il un moyen de remplacer le mdsnd Android par un autre plus configurable qui permet de changer le nom qu'il annonce ?
  • Est-ce que l'exécution d'un mdnsd patché nécessite un appareil rooté ?

0 votes

0 votes

@IrfanLatif Merci, cela a beaucoup aidé. Je vois beaucoup d'applications pour balayer le mdns / dns-sd, mais aucune ne pourrait rendre mon téléphone visible. Je trouve ça assez surprenant - s'il peut envoyer des paquets udp à 224.0.0.251:5353, pourquoi ne peut-il pas répondre aux autres?

0 votes

Je n'ai pas beaucoup utilisé MDNS, sauf pour apprendre, donc je ne peux pas recommander une application. Mais d'après la documentation de l'API officielle d'Android, il est très simple de diffuser votre service ainsi que de découvrir d'autres services. Il existe également des bibliothèques tierces disponibles comme jmdns. Cette application de démonstration illustre les possibilités en détail.

6voto

Irfan Latif Points 16863

Ma réponse à Pourquoi "mdnsd" épuise-t-il ma batterie et comment l'arrêter? explique le rôle du démon mDNS d'Android qui est un service init, démarré à la demande. Il fournit Multicast DNS (résolution de noms d'hôte/domaine) et DNS-SD (Découverte de services basée sur DNS); tous deux faisant partie du Zero Configuration Networking.

Comment résoudre le nom d'hôte mDNS d'Android en adresse IP?

Techniquement, il est possible pour DNS-SD d'utiliser l'ancien DNS unicast pour résoudre le nom de domaine trouvé dans l'enregistrement SRV (d'un service diffusé) en adresse IP. Mais le plus souvent, mDNS et DNS-SD sont liés l'un à l'autre. Et c'est le cas avec Android.

Android n'expose aucun réglage ou API pour effectuer uniquement la résolution de noms (en tant que Répondeur ou Chercheur mDNS) et non la découverte de services. Ni le mécanisme de résolution des noms n'utilise mDNS. Le mdnsd d'Android sert uniquement de diffuseur / répondeur mDNS au service DNS-SD. Vous ne pouvez pas utiliser l'un ou l'autre de manière indépendante (pour autant que je sache).

Mais il y a quelques options :

  • Exécutez une application sur votre appareil Android avec un service découvrable (même un factice), qui utilise l'API officielle d'Android (qui interagit à son tour avec mdnsd en dessous) pour diffuser et découvrir des services. Ainsi, tout autre hôte sur le réseau local avec la capacité mDNS/DNS-SD peut découvrir le service. Par exemple, utilisez la commande avahi-browse sur un système Linux. La résolution du service fournit l'adresse IP de l'appareil Android.

  • Lorsque mdnsd fonctionne, l'appareil Android se diffuse déjà avec un nom codé en dur: Android.local. Si vous ne souhaitez pas diffuser de service, il existe une autre option.

    ADB repose sur mDNS pour découvrir des appareils sur le réseau local en enregistrant un service de type _adb._tcp (voir les références ici, ici et ici). Activez donc le "Débogage USB" dans les Options pour les développeurs et vous verrez mdnsd fonctionner sur votre appareil.

    Ou sur un appareil rooté, lancez mdnsd seul, sans démarrer ADB, en exécutant setprop ctl.start mdnsd ou simplement start mdnsd.

Dans les deux cas ci-dessus, lorsque mdnsd fonctionne, l'exécution de avahi-resolve-host-name Android.local sur un PC Linux devrait renvoyer l'adresse IP de votre appareil Android.

Que se passe-t-il si deux appareils Android ont le même nom d'hôte?

En cas de conflit de noms, comme le nom Android.local est codé en dur, l'appareil Android qui se connecte plus tard se renomme automatiquement en Android-2.lcoal, Android-3.local et ainsi de suite (voir la référence ici). Ainsi, vous pouvez résoudre les noms en conséquence.

Y a-t-il une option pour changer le nom d'hôte mDNS?

En venant au problème suivant, que se passe-t-il si votre fabricant OEM/ROM a supprimé ou modifié le service mdnsd, ou si vous souhaitez utiliser un nom de votre choix, et non le nom codé en dur?

  • Construisez et exécutez votre propre répondeur mDNS plus configurable comme Avahi sur l'appareil Android.

  • Encore plus simple, patchez et reconstruisez le mdnsd d'Android pour recevoir un argument en ligne de commande pour le nom, ou lire à partir d'un fichier de configuration s'il existe.

    Non, cela ne nécessite pas un appareil rooté. Le binaire mdnsd patché devrait fonctionner correctement depuis adb shell, ou même sur une application émulateur de terminal comme Termux. À l'heure où ces lignes sont écrites, il n'y a qu'un seul appel système dans le code source de mdnsd qui est bloqué par seccomp pour les applications. Mais cela peut être facilement supprimé. Ni le DAC ni le MAC ne bloquent l'exécution.

1 votes

Hé, très drôle! Android.local fonctionne. Le problème, c'est qu'il ne trouve qu'un de mes androids... il faut que je change le nom qu'il annonce.

0 votes

Merci! Malheureusement, la source montre clairement qu'il n'y a pas moyen de le changer. La question suivante, y a-t-il un moyen de remplacer le android mdsnd par un autre plus configurable.

1 votes

La manière la plus simple est de patcher et reconstruire le mdnsd d'Android pour recevoir un argument en ligne de commande pour le nom, ou le lire à partir d'un fichier de configuration s'il existe.

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X