GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo puedo resolver un nombre de host en una dirección IP en un script Bash?

Puedes usar getent , que viene con glibc (así que casi seguro que lo tienes en Linux). Esto se resuelve usando gethostbyaddr/gethostbyname2, y también verificará /etc/hosts /NIS/etc:

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

O, como dijo Heinzi a continuación, puede usar dig con el +short argumento (consulta servidores DNS directamente, no mira /etc/hosts /NSS/etc) :

dig +short unix.stackexchange.com

Si dig +short no está disponible, cualquiera de los siguientes debería funcionar. Todos estos consultan DNS directamente e ignoran otros medios de resolución:

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 solo desea imprimir una IP, agregue el exit comando a awk flujo de trabajo de.

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 del paquete dnsutils:

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

(Corregido nombre del paquete según los comentarios. Como nota, otras distribuciones tienen host en diferentes paquetes:Debian/Ubuntu bind9-host , openSUSE bind-utils , Frugalware bind .)


Tengo una herramienta en mi máquina que parece hacer el trabajo. La página de manual muestra que parece venir con mysql... Así es como podría usarlo:

resolveip -s unix.stackexchange.com
64.34.119.12

El valor de retorno de esta herramienta es diferente de 0 si el nombre de host no se puede resolver:

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

ACTUALIZAR En fedora, viene 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

Supongo que crearía una dependencia extraña para su secuencia de comandos...


Linux
  1. ¿Se puede conectar un script Bash a un archivo?

  2. ¿Cómo agregar un usuario de Unix/linux en un script Bash?

  3. ¿Cómo establecer parámetros cuando Pipe Bash Script to Bash?

  4. ¿Cómo llamar a una función Bash en Bash Script dentro de Awk?

  5. Cómo dividir una cadena en Bash Script

Cómo escribir un script Bash con ejemplos

Cómo configurar la dirección IP estática en Linux y Unix

Cómo ejecutar un script Bash

¿Cómo pasar parámetros a un script Bash?

¿Cómo puedo probar mi script Bash en versiones anteriores de Bash?

¿Cómo puedo responder automáticamente a las indicaciones en un script Bash de Linux?