web-dev-qa-db-fra.com

Pourquoi la commande Host ne résout-elle pas les entrées dans / etc / hosts?

J'ai ce qui suit /etc/hosts fichier sur une machine ubuntu 12.04

127.0.0.1 localhost
10.248.27.66 ec2-50-112-220-110.us-west-2.compute.amazonaws.com puppetmaster

# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

Cependant, la commande Host ne résout pas correctement le nom puppetmaster, tandis que la commande telnet est

[email protected]:/home/ubuntu# Host puppetmaster
Host puppetmaster not found: 3(NXDOMAIN)

[email protected]:/home/ubuntu# telnet puppetmaster 8140
Trying 10.248.27.66...
Connected to ec2-50-112-220-110.us-west-2.compute.amazonaws.com.
Escape character is '^]'.

Pourquoi la commande Host ne résout-elle pas les entrées dans/etc/hosts?

26
user784637

Le programme Host utilise libresolv pour effectuer une requête DNS directement, c'est-à-dire qu'il n'utilise pas gethostbyname.

La plupart des programmes, lorsqu'ils tentent de se connecter à un autre hôte, appellent l'appel système gethostbyname ou une fonction similaire. Cette fonction obéit à la configuration de /etc/nsswitch.conf. Ce fichier a une ligne qui dans Ubuntu 12.04 est par défaut la suivante:

hosts:          files mdns4_minimal [NOTFOUND=return] dns mdns4

ce qui signifie qu'il utilisera d'abord /etc/hosts, puis revenez aux requêtes DNS.

Si vous souhaitez effectuer une recherche d'hôte de cette façon, vous pouvez le faire avec getent hosts. Par exemple:

$ getent hosts serverfault.com
198.252.206.16  serverfault.com

J'espère que ça aide.

53
Kvisle

Parce que l'utilitaire Host est exclusivement un utilitaire de recherche DNS.

La plupart des applications utilisent les appels de bibliothèque getaddrinfo ou gethostbyname. Ces bibliothèques interrogent un fichier appelé /etc/nsswitch.conf pour déterminer la priorité de recherche et la politique à suivre pour effectuer différentes recherches.

Généralement /etc/nsswitch.conf contient la ligne

hosts:        files dns

Qui indique à un programme d'interroger d'abord /etc/hosts, puis interrogez DNS en cas d'échec.

Étant donné que les hôtes effectuent exclusivement des recherches DNS, il ne regarde pas dans /etc/hosts pour effectuer la recherche.

10
Matthew Ife

Vous constaterez que Dig et nslookup se comportent de la même manière que Host.

La raison en est que le but de toutes ces commandes est de faire des recherches DNS, pas de chercher dans des fichiers.

La plupart des autres programmes utilisent le résolveur de nom du système d'exploitation qui consulte /etc/nsswitch.conf puis (si nécessaire) /etc/resolv.conf pour décider comment résoudre le nom d'hôte que vous demandez. (Il s'agit d'une simplification, il existe d'autres options.) Le nsswitch.conf le fichier place généralement la priorité sur les fichiers locaux plutôt que sur DNS.

4
Ladadadada