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

0

Estou no shell e quero saber o (s) endereço (s) IP correspondente (s) para um nome de host.

Eu sei que poderia passar por Perl, PHP, Python ou várias 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 em torno de getaddrinfo() .

Estou errado? Existe um? host , dig e getent não contam, eu quero algo que usa a libc e age de acordo com /etc/nsswitch.conf , e algo que provavelmente é instalado em qualquer sistema (linux) por padrão.

Movido aqui de link

Resposta: Eu estava errado, getent não procura exclusivamente em /etc/hosts , ele realmente faz uma pesquisa adequada.

    
por clacke 28.11.2013 / 06:16

2 respostas

3

a ferramenta tradicional para fazer pesquisas de nomes de host é nslookup de bind, mas está sendo substituída por dig. ambas as ferramentas são dns speciffic e não usam nsswitch. Os hosts getent usam nsswitch, mas muito menos usados.

    
por 28.11.2013 / 06:48
0

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, é muito improvável que arp esteja disponível em qualquer servidor que faça a resolução de nomes. Como arp segue as configurações de nsswitch.conf , só usa libc , está disponível em qualquer sistema Linux / Unix e fornece uma saída que parece ser consistente entre implementações, analisando sua saída que faria o trabalho:

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

Aqui está uma função de shell que usa esse método, evitando um problema com o Linux arp que alterna 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/).*$//'
  )
}
    
por 29.11.2013 / 01:32

Tags