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.
0 votes
Connexe: Pourquoi "mdnsd" vide-t-il ma batterie et comment l'arrêter?
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.
0 votes
@IrfanLatif C'est dns-sd (découverte de service). Cette question concerne mdns (dns multicast). Mais le premier inclut probablement le dernier. Si c'est correct, alors toute application qui peut se faire connaître sur dns-sd, pourra également rendre mon téléphone référençable en tant que myandroidthing.local.