mDNSResponder, mDNS et dns-sd

Le processus qui rend Bonjour possible est mDNSResponder, il est situé dans /usr/sbin. /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist invoque mDNSResponder au démarrage (boot). L’une des façons les plus faciles pour circonscrire un problème que vous pensez lié à Bonjour est de désactiver temporairement mDNSResponder :

launchctl unload -w /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist

Pour le réactiver :

launchctl load -w /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist

En addition de l’activation et la désactivation de mDNSResponder, quand vous cherchez à résoudre un problème vous devriez toujours regarder les logs. Les événements de logs sont enregistrés à la manière syslog et sont disponibles dans la Console. Ils sont situés à /var/log/system.log. En recherchant les erreurs liés à mDNSResponder dans system.log peut aussi être fait en utilisant le Terminal :

cat /var/log/system.log | grep mDNSResponder

Ou interactivement, vous pouvez chercher les erreurs comme elles apparaissent :

tail -f /var/log/system.log | grep mDNSResponder

Afin d’avoir plus d’informations, envoyer une commande SIGUSR1 à mDNSResponder en utilisant killall :

sudo killall -USR1 mDNSResponder

Pour voir les informations au niveau des paquets dans system.log, envoyez un SIGUSR2 à mDNSResponder :

sudo killall -USR2 mDNSResponder

Pour copier l’état dans system.log :

sudo killall -INFO mDNSResponder

mDNSResponder utilise Mach sur le port 5123. Chaque service qui a Bonjour implémenté s’enregistrera avec mDNSResponder sur ce port et pourra être appelé. On retrouve le mécanisme des enregistrements DNS avec un préfixe pour le service et un suffixe pour le type TCP/IP. Par exemple, IPP printing est _ipp._tcp., Apple Events distants est -EPPC._tcp., Remote Frame Buffer est _rfb._tcp., SSH est _ssh._tcp., SFTP est _sftp-SSH._tcp, Partage de Page Web est appelé _home-sharing._tcp, le partage iTunes est _afpovertcp._tcp. et AFP est _afpovertcp._tcp. Un exemple de trafic UDPserait _net-assistant._udp.

Si vous désirez voir quel service est enregistré (et enregistrer des sercies si vous contruisez un réseaux de services qui le nécessitent), utilisez la commande mDNS. L’option -B pour mDNS peut être utilisé pour requérir un espace de noms. Par exemple, l’espace de noms _afpovertcp._tcp peut être appelé en utlisant la commande suivante :

mDNS -B _afpovertcp._tcp

Le résultat serait le suivant, il montre toutes les instances vivantes que le système voit :

Timestamp     A/R Flags Domain                   Service Type             Instance Name

22:53:15.988  Add     0 local.                   _afpovertcp._tcp.            Krypted MacBook Air

Pour enregistrer des services avec Bonjour, il faut utiliser l’opérateur -R et pour chercher des information au sujet d’une instance donnée d’un service utilisez l’opérateur -L. L’opérateur -L vous permet d’obtenir beaucoup d’informations à propos d’un objet donné. Une fois que vous avez trouvé l’objet en utilisant l’option -B, vous aurez le Domaine et le nom de l’instance.  Cela permettra à mDNS d’obtenir IPv4, IPv6, le numéro de port, et les enregistrements TXT, qui fournissent une bande d’options, tel que les informations des imprimantes et autres services et objets. Par exemple, Mac OS X  génère aussi automatiquement des informations au sujet des imprimantes, fondés sur les informations insérées dans le système au sujet de ces imprimantes, tel que le support d’agrafage (Staple=F), le support de collation (Collate=T), et l’url de l’administrateur CUPS (adminurl:http///<computer name>:631/printers/<printername>). D’autres services comme le partage personnel fera un usage important du nom de la machine ou de l’ID de la bas de données d’iTunes.

Pour permettre à mDNS d’utiliser une sortie étendue, utilisez la commande mDNS, avec l’option -L, suivi du nom de l’instance (le nom de l’instance est défini par le service à l’enregistrement de l’instance et peut être le nom de l’imprimante, le nom de l’ordinateur ou ce que le vendeur choisit d’utiliser). Après le nom de l’Instance, mettez l’espace d’adressage (le type de service) et ensuite le domaine donné précédemment lors de l’utilisation de l’option -B. Par exemple, pour regarder une HP 8565 partagé depuis le MacBook Air de Krypted appelé « HP 8565 Krypted MacBook Air », j’utilise :

mDNS -L « HP 8565 Krypted MacBook Air » _ipp._tcp local.

D’autres opérateurs qui ne sont pas sur la page man, mais sont disponibles, inclut _E pour trouver des domaines d’enregistrement recommandés, -F pour trouver des informations au sujet des domaines navigués, -A pour tester des enregistrements mis à jour, -U pour tester des enregistrements TXT, -N pour tester des mises à jour d’enregistrements NULL, -T pour tester des ajouts d’enregistrements, -M pour de multiples enregistrements et -I pour mettre à jour immédiatement des enregistrements plutôt que d’obliger à travailler à travers la mémoire cache. Disponible aussi pour appelé est la commande dns-sd, utilisant la syntaxe identique à mDNS et avec la même sortie aussi. Les données du système ne change pas toujours dynamiquement. Pour recharger les informations après des changements, utilisez l’option flushcache de dscacheutil :

dscacheutil -flushcache

 

Cet article a paru le 27 mars 2011 sur le site Krypted
Pas de commentaires