¿Existe una herramienta de línea de comandos estándar para realizar una búsqueda de nombre de host?

¿Existe una herramienta de línea de comandos estándar para realizar una búsqueda de nombre de host?

Estoy en el shell y quiero saber las direcciones IP correspondientes a un nombre de host.

Sé que podría obtenerlo a través de Perl, PHP, Python o varios otros lenguajes de programación (¡probablemente incluso awk!), y esta será mi solución, pero me sorprende que no parezca haber una herramienta de línea de comandos para hacer esto. , no hay un simple envoltorio alrededor getaddrinfo().

¿Me equivoco? ¿Hay uno? host, digy getentno cuentes, quiero algo que use la libc y actúe de acuerdo con /etc/nsswitch.conf, y algo que probablemente esté instalado en cualquier sistema (linux) por defecto.

Se mudó aquí desdehttps://stackoverflow.com/questions/20211326/is-there-a-standard-command-line-tool-to-do-a-hostname-lookup

Respuesta: Me equivoqué, getentno busca exclusivamente en /etc/hosts, en realidad realiza una búsqueda adecuada.

Respuesta1

la herramienta tradicional para realizar búsquedas de nombres de host es nslookup de bind, pero está siendo reemplazada por dig. Ambas herramientas son específicas de DNS y no utilizan nsswitch. getent hosts usa nsswitch, pero se usa mucho menos.

Respuesta2

getentes sin duda la herramienta adecuada para el trabajo, pero lamentablemente no está disponible en todas partes, una de las razones es que no es obligatorio que POSIX no lo defina.

Por otro lado, aunque tampoco está especificado en el estándar, arpes muy poco probable que no esté disponible en ningún servidor que admita resolución de nombres. La arpsiguiente nsswitch.confconfiguración, solo uses libc, está disponible en cualquier sistema Linux/Unix y proporciona un resultado que parece ser consistente entre las implementaciones; analizar su resultado sería suficiente:

$ arp stackoverflow.com | sed -e 's/.*(//' -e 's/).*$//'
198.252.206.16

Aquí hay una función de shell que usa ese método, evitando un problema con arp de Linux que cambia a un formato de salida diferente en algunos casos extremos:

resolve()
{
  : ${1:?Usage: resolve name}
  (
    PATH=$PATH:/usr/sbin
    ao=$(arp $1)
    [ "$(echo "$ao"|grep HWaddress)" ] && ao=$(arp -a $1)
    echo "$ao" | sed -e 's/.*(//' -e 's/).*$//'
  )
}

información relacionada