Hay varias utilidades de línea de comandos para resolver nombres de host ( host
, dig
, nslookup
), sin embargo, todos los servidores de nombres de uso exclusivo, mientras que las aplicaciones en aspecto general en /etc/hosts
primer lugar (usando gethostbyname creo).
¿Existe una utilidad de línea de comando para resolver nombres de host que se comporta como una aplicación habitual, buscando /etc/hosts
primero y luego preguntando a un servidor de nombres?
(Soy consciente de que probablemente sería como 3 líneas de c, pero lo necesito dentro de un script de shell algo portátil).
awk '/hostname/ { print $1 }' /etc/hosts
ayuda?Respuestas:
Esto se logra fácilmente con
getent
:getent
realizará búsquedas para cualquier tipo de datos configurados ennsswitch.conf
.fuente
dig
onslookup
.Una herramienta que funcionaría es
getent
. Entonces podrías usargetent hosts www.google.com
, ogetent hosts localhost
. Recuperará entradas de las bases de datos como se especifica en la configuración de su conmutador de servicio de nombres/etc/nsswitch.conf
.fuente
files dns
para hosts, lo que significa que / etc / hosts es consultado y luego el solucionador de DNS. Su configuración puede ser diferente.getent
. Gracias por la introducción a este comando.Puede usar un contenedor gethostbyname () (obsoleto) como:
O un contenedor getaddrinfo () como:
Tenga en cuenta que getaddrinfo devolverá todas las instancias como una lista. La última parte del comando selecciona solo la primera tupla. Esto también puede devolver direcciones IPv6.
fuente
resolveip
Hará esto.Curiosamente, es parte de los paquetes mysql-server en RHEL y Ubuntu.
fuente
Puede usar [su idioma favorito aquí] para escribir un script que llame a getnameinfo . Así es como los binarios (como el ping) deberían hacerlo, por lo que está seguro de que recibirá el mismo tratamiento.
fuente
Uso
getent ahosts
, por ejemplo:Obtendrá todas las direcciones IPv4 e IPv6, a través del solucionador glibc (por lo tanto, use
/etc/hosts
primero, como generalmente se configura en/etc/nsswitch.conf
).No lo use
getent hosts
, ya que le dará direcciones IPv6 o IPv4 (no ambas), y el protocolo elegido puede no ser uno que no funcione. De hecho, generalmente se prefieren las direcciones IPv6, pero en algunos lugares, los enrutadores filtran (no admiten) los datos IPv6.fuente
versión de línea de comando "gethostbyname" :
fuente
Podrías ser realmente hacky y usar
arp
:pero eso sería realmente feo, así que no deberías hacer eso.
fuente
getent hosts
está roto. Prefiere direcciones IPv6,gai.conf
debe configurarse para preferir ipv4 pero ...El Perl
gethostbyname
usa la precedencia en/etc/nsswitch.conf
Entonces esto funciona como
getent hosts
debería funcionar para mí.También:
Deberia trabajar.
fuente
getent ahosts
.Prueba esto:
fuente
El siguiente comando realizará la búsqueda a través de DNS / etc / hosts a través de la búsqueda directa del servidor DNS.
Este comando intentará hacer ping a un dominio (en este caso, google.com) una vez con un tiempo de espera de 2 segundos, obtenga la primera línea del comando PING que indicará "PING google.com (216.58.199.36) 56 (84 ) bytes de datos ", luego use Stream Editor (sed) para detectar el primer conjunto de corchetes y extraer los datos dentro de ellos, que es la dirección IP que estamos buscando.
NOTA: la expresión regex no funcionará si hay paréntesis (también conocidos como corchetes circulares) en la URL, pero este sería un caso raro.
fuente