Búsqueda de host que respeta / etc / hosts

Las utilidades como host y dig permiten ver la dirección IP correspondiente al nombre de host.

También existe la utilidad getent que se puede usar para consultar /etc/hosts u otras bases de datos NSS.

Estoy buscando una utilidad estándar conveniente (que está disponible en Debian, por ejemplo) que resuelve un nombre de host independientemente de dónde esté definido.

Debería ser más o less equivalente a

 ping "$HOST" | head -1 | perl -lne '/\((.*?)\)/ && print $1' 

Related of "Búsqueda de host que respeta / etc / hosts"

El único command que sé que hace lo que quieres es resolverip:

http://linux.die.net/man/1/resolveip

Sin embargo, solo viene con el server mysql, que puede no ser ideal para instalar en todas partes.

Si el problema es que no desea resolver estos nombres usando ipv6, solo solicite a getent que use ipv4 solamente. Esto enumerará todas las direcciones ipv4:

 giuseppe@blatta:~$ getent ahostsv4 www.google.com | cut -d' ' -f1 | sort -u 173.194.40.80 173.194.40.81 173.194.40.82 173.194.40.83 173.194.40.84 

Lo que pasa es que hay varias API para resolver nombres de host como gethostbyname , getaddrinfo e inet_pton y algunas de ellas pueden devolver más de una dirección y / o puede consultar el tipo de dirección que desee.

Si desea una forma portátil de get una dirección IPv4, entonces tal vez:

 perl -MSocket -le 'print inet_ntoa inet_aton shift' www.google.com 

gethostip -d name.domain del package syslinux en Ubuntu (y probablemente Debian). -d genera formatting decimal.

(Esta respuesta solo se aplica si está en la raíz del equipo).

Solía ​​enojarme también con esto, y luego estandaricé la ejecución de dnsmasq en todas mis máquinas. Dnsmasq es un caching de DNS ligero. Como beneficio adicional, sirve el contenido de /etc/hosts en lugar del DNS.

Utilicé mi conocimiento puro de Perl e hice un pequeño script con event handling errores:

/ usr / local / bin / gethostip:

 #!/usr/bin/perl # inspinetworking by: https://unix.stackexchange.com/questions/71379/host-lookup-that-respects-etc-hosts#71393 use strict; use Socket; my $name = $ARGV[0]; if ($name eq '') { print STDERR "Usage: gethostip <hostname>\n"; exit 1; } my $ip = inet_aton($name); die("Unable to resolve host name $name") if ($ip eq ''); my $ipstr = inet_ntoa($ip); print "$ipstr\n"; 

Gracias a Stéphane Chazelas por la idea inicial