Búsqueda de host que respeta / etc / hosts

19

A las utilidades les gusta hosty le digpermiten ver la dirección IP correspondiente al nombre del host.

También existe la getentutilidad que se puede utilizar para consultar /etc/hostsu 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 menos equivalente a

ping "$HOST" | head -1 | perl -lne '/\((.*?)\)/ && print $1'
Roman Cheplyaka
fuente
55
¿Qué es exactamente lo que está mal getent?
Patrick
2
Sí, no creo que pueda ser más conveniente que getent.
Bratchley
@Patrick: hmm, no me di cuenta que getenttambién se ve en DNS (pensé que solo se ve en /etc/hosts). Ahora que lo he probado, esto es lo que está mal getent: porque google.com, devuelve una sola dirección, y esa dirección es IPv6. Lo que no es útil, ya que estoy en una red IPv4, y mi comando realmente imprimiría una dirección IPv4.
Roman Cheplyaka
@RomanCheplyaka - Vea la respuesta de eppesuig que muestra cómo usar getent para buscar solo direcciones IPv4: unix.stackexchange.com/a/71392/7453
slm

Respuestas:

4

El único comando que sé que hace lo que quieres es resolveip:

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

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

Georgyo
fuente
14

Si el problema es que no desea resolver estos nombres usando ipv6, simplemente solicite a getent que use solo ipv4. 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
eppesuig
fuente
Para aquellos que se preocupan por olvidar el historial (es decir, IPv4), use ahostsv6.
Luc
2
Para aquellos que desean evitar considerar las diferencias entre IPv4 e IPv6, use getent ahosts google.com.
Mikko Rantalainen
6

La cuestión es que hay varias API para resolver nombres de host gethostbyname, getaddrinfoy inet_ptonalgunas 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 obtener una dirección IPv4, entonces tal vez:

perl -MSocket -le 'print inet_ntoa inet_aton shift' www.google.com
Stéphane Chazelas
fuente
2

(Esta respuesta solo se aplica si eres root en la máquina).

Esto también me molestaba, y luego estandaricé la ejecución de dnsmasq en todas mis máquinas. Dnsmasq es un caché de DNS ligero. Como beneficio adicional, sirve el contenido de /etc/hostsmás de DNS.

Gilles 'SO- deja de ser malvado'
fuente
2

gethostip -d name.domaindel syslinuxpaquete en Ubuntu (y probablemente Debian). -dsalidas formato decimal.

dan3
fuente
0

Utilicé mi conocimiento puro de perl e hice un pequeño script con manejo de errores:

/ usr / local / bin / gethostip:

#!/usr/bin/perl

# inspired by: /unix/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

Daniel Alder
fuente