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'

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:



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

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

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.


2

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


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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.