Vous pouvez utiliser getent
, qui vient avec glibc
(donc vous l'avez presque certainement sous Linux). Cela résout l'utilisation de gethostbyaddr/gethostbyname2, et vérifiera donc également /etc/hosts
/NIS/etc :
getent hosts unix.stackexchange.com | awk '{ print $1 }'
Ou, comme Heinzi l'a dit ci-dessous, vous pouvez utiliser dig
avec le +short
argument (interroge directement les serveurs DNS, ne regarde pas /etc/hosts
/NSS/etc) :
dig +short unix.stackexchange.com
Si dig +short
n'est pas disponible, l'une des options suivantes devrait fonctionner. Tous ces éléments interrogent DNS directement et ignorent les autres moyens de résolution :
host unix.stackexchange.com | awk '/has address/ { print $4 }'
nslookup unix.stackexchange.com | awk '/^Address: / { print $2 }'
dig unix.stackexchange.com | awk '/^;; ANSWER SECTION:$/ { getline ; print $5 }'
Si vous ne souhaitez imprimer qu'une seule IP, ajoutez le exit
commande à awk
de flux de travail.
dig +short unix.stackexchange.com | awk '{ print ; exit }'
getent hosts unix.stackexchange.com | awk '{ print $1 ; exit }'
host unix.stackexchange.com | awk '/has address/ { print $4 ; exit }'
nslookup unix.stackexchange.com | awk '/^Address: / { print $2 ; exit }'
dig unix.stackexchange.com | awk '/^;; ANSWER SECTION:$/ { getline ; print $5 ; exit }'
Avec host
depuis le package dnsutils :
$ host unix.stackexchange.com
unix.stackexchange.com has address 64.34.119.12
(Corrigé nom du paquet selon les commentaires. A noter que les autres distributions ont host
dans différents packages :Debian/Ubuntu bind9-host , openSUSE bind-utils , Frugalware lier .)
J'ai un outil sur ma machine qui semble faire le travail. La page de manuel montre qu'il semble venir avec mysql... Voici comment vous pouvez l'utiliser :
resolveip -s unix.stackexchange.com
64.34.119.12
La valeur de retour de cet outil est différente de 0 si le nom d'hôte ne peut pas être résolu :
resolveip -s unix.stackexchange.coma
resolveip: Unable to find hostid for 'unix.stackexchange.coma': host not found
exit 2
MISE À JOUR Sur fedora, il est livré avec mysql-server :
yum provides "*/resolveip"
mysql-server-5.5.10-2.fc15.x86_64 : The MySQL server and related files
Dépôt : fedora
Correspondance depuis :
Nom de fichier : /usr/bin/resolveip
Je suppose que cela créerait une dépendance étrange pour votre script...