GNU/Linux >> Linux Esercitazione >  >> Linux

Come posso risolvere un nome host in un indirizzo IP in uno script Bash?

Puoi usare getent , che viene fornito con glibc (quindi quasi sicuramente ce l'hai su Linux). Questo si risolve usando gethostbyaddr/gethostbyname2, quindi controllerà anche /etc/hosts /NIS/etc:

getent hosts unix.stackexchange.com | awk '{ print $1 }'

Oppure, come ha detto Heinzi sotto, puoi usare dig con il +short argomento (interroga direttamente i server DNS, non guarda /etc/hosts /NSS/etc) :

dig +short unix.stackexchange.com

Se dig +short non è disponibile, dovrebbe funzionare una qualsiasi delle seguenti opzioni. Tutti questi interrogano direttamente il DNS e ignorano altri mezzi di risoluzione:

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 }'

Se vuoi stampare solo un IP, aggiungi exit comando a awk flusso di lavoro di.

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 }'

Con host dal pacchetto dnsutils:

$ host unix.stackexchange.com
unix.stackexchange.com has address 64.34.119.12

(Corretto nome del pacchetto in base ai commenti. Come nota altre distribuzioni hanno host in diversi pacchetti:Debian/Ubuntu bind9-host , openSUSE bind-utils , Frugalware lega .)


Ho uno strumento sulla mia macchina che sembra fare il lavoro. La pagina man mostra che sembra venire con mysql... Ecco come potresti usarlo:

resolveip -s unix.stackexchange.com
64.34.119.12

Il valore di ritorno di questo strumento è diverso da 0 se il nome host non può essere risolto :

resolveip -s unix.stackexchange.coma
resolveip: Unable to find hostid for 'unix.stackexchange.coma': host not found
exit 2

AGGIORNA Su fedora, viene fornito con 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

Immagino che creerebbe una strana dipendenza per il tuo script...


Linux
  1. Come eseguire il debug di uno script Bash?

  2. Come aggiungere un utente Unix/linux in uno script Bash?

  3. Come risolvere un nome host in un indirizzo IP in uno script Bash?

  4. Come impostare i parametri quando Pipe Bash Script su Bash?

  5. Come verificare se Bash può stampare i colori?

Come scrivere uno script Bash con esempi

Come configurare l'indirizzo IP statico in Linux e Unix

Come eseguire uno script Bash

Come eseguire uno script bash?

Come posso assegnare un IP tramite indirizzo MAC in dhcpd

Come posso ottenere il mio indirizzo IP esterno in uno script di shell?