GNU/Linux >> Tutoriels Linux >  >> Linux

Comment puis-je résoudre un nom d'hôte en une adresse IP dans un script Bash ?

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...


Linux
  1. Comment déboguer un script bash ?

  2. Comment ajouter un utilisateur Unix/linux dans un script bash ?

  3. Comment résoudre un nom d'hôte en adresse IP dans un script bash ?

  4. Comment définir les paramètres lorsque Pipe Bash Script to Bash ?

  5. Comment appeler une fonction Bash dans le script Bash à l'intérieur d'Awk ?

Comment écrire un script bash avec des exemples

Comment configurer une adresse IP statique sous Linux et Unix

Comment exécuter un script bash

Comment passer des paramètres à un script Bash ?

Comment exécuter un script bash ?

Comment puis-je attribuer une adresse IP par adresse MAC dans dhcpd