Existe uma ferramenta de linha de comando padrão para fazer uma pesquisa de nome de host?

Existe uma ferramenta de linha de comando padrão para fazer uma pesquisa de nome de host?

Estou no shell e quero saber os endereços IP correspondentes para um nome de host.

Eu sei que poderia conseguir isso através de Perl, PHP, Python ou uma série de outras linguagens de script (provavelmente até mesmo awk!), e esta será minha solução alternativa, mas estou surpreso que parece não haver nenhuma ferramenta de linha de comando para fazer isso , nenhum wrapper simples por aí getaddrinfo().

Estou errado? Existe algum? host, dige getentnão conte, quero algo que use a libc e atue de acordo com /etc/nsswitch.conf, e algo que provavelmente esteja instalado em qualquer sistema (linux) por padrão.

Mudou-se para cá dehttps://stackoverflow.com/questions/20211326/is-there-a-standard-command-line-tool-to-do-a-hostname-lookup

Answer: Eu estava errado, getentnão olha exclusivamente /etc/hosts, na verdade faz uma pesquisa adequada.

Responder1

a ferramenta tradicional para fazer pesquisas de nomes de host é o nslookup do bind, mas está sendo substituído pelo dig. ambas as ferramentas são específicas do DNS e não usam o nsswitch. getent hosts usa nsswitch, mas muito menos usado.

Responder2

getenté certamente a ferramenta certa para o trabalho, mas infelizmente não está disponível em todos os lugares, uma das razões é que não é obrigatório ser indefinido pelo POSIX.

Por outro lado, embora não seja especificado pelo padrão, arpé muito improvável que não esteja disponível em nenhum servidor que faça resolução de nomes. Como arpsegue nsswitch.confas configurações, usa apenas libc, está disponível em qualquer sistema Linux/Unix e fornece uma saída que parece ser consistente entre as implementações, analisar sua saída resolveria o problema:

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

Aqui está uma função shell que usa esse método, evitando um problema com o arp do Linux, que muda para um formato de saída diferente em alguns casos:

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/).*$//'
  )
}

informação relacionada