Existem vários utilitários de linha de comando para nomes de host resolve ( host
, dig
, nslookup
), no entanto, todos os servidores de nomes de uso exclusivamente, enquanto as aplicações em aparência geral em /etc/hosts
primeiro (utilizando gethostbyname eu acredito).
Existe um utilitário de linha de comando para resolver nomes de host que se comportam como um aplicativo comum, analisando /etc/hosts
primeiro e somente solicitando um servidor de nomes?
(Estou ciente de que provavelmente seria como 3 linhas de c, mas preciso dele dentro de um script shell um tanto portátil.)
linux
domain-name-system
hostname
Zulan
fonte
fonte
awk '/hostname/ { print $1 }' /etc/hosts
ajuda?Respostas:
Isso é facilmente alcançado com
getent
:getent
fará pesquisas para qualquer tipo de dados configurado nonsswitch.conf
.fonte
dig
ounslookup
.Uma ferramenta que funcionaria é
getent
. Então você pode usargetent hosts www.google.com
, ougetent hosts localhost
. Ele recuperará entradas dos bancos de dados, conforme especificado na sua configuração do Name Service Switch/etc/nsswitch.conf
.fonte
files dns
para hosts, o que significa que / etc / hosts é consultado e, em seguida, o resolvedor de DNS. Sua configuração pode ser diferente.getent
. Obrigado pela introdução deste comando.Você pode usar um wrapper gethostbyname () (descontinuado) como:
Ou um wrapper getaddrinfo () como:
Observe que getaddrinfo retornará todas as instâncias como uma lista. A última parte do comando seleciona apenas a primeira tupla. Isso também pode retornar endereços IPv6.
fonte
resolveip
vai fazer isso.Estranhamente, faz parte dos pacotes mysql-server no RHEL e Ubuntu.
fonte
Você pode usar [seu idioma favorito aqui] para escrever um script que chama getnameinfo . É assim que os binários (como ping) devem fazer isso, para garantir que você receba o mesmo tratamento.
fonte
Use
getent ahosts
, por exemplo:Você obterá todos os endereços IPv4 e IPv6, através do resolvedor glibc (usando assim
/etc/hosts
primeiro, como geralmente configurado em/etc/nsswitch.conf
).Não use
getent hosts
, pois ele fornecerá endereços IPv6 ou IPv4 (não ambos), e o protocolo escolhido pode não ser aquele que não funciona. De fato, os endereços IPv6 são geralmente preferidos, mas em alguns locais, os dados IPv6 são filtrados (não suportados) pelos roteadores.fonte
Versão da linha de comandos "gethostbyname" :
fonte
Você pode ser realmente hacky e usar
arp
:mas seria muito feio, então você não deve fazer isso.
fonte
getent hosts
está quebrado. Prefere endereços IPv6,gai.conf
deve ser configurado para preferir o ipv4, mas ....O Perl
gethostbyname
usa a precedência em/etc/nsswitch.conf
Então, isso funciona como
getent hosts
deve funcionar para mim.Além disso:
Deveria trabalhar.
fonte
getent ahosts
.Tente o seguinte:
fonte
O comando a seguir executará a pesquisa via DNS / etc / hosts na pesquisa direta do servidor DNS.
Este comando tentará executar ping em um domínio (neste caso, google.com) uma vez com um tempo limite de espera de 2 segundos, obter a primeira linha do comando PING que indicará "PING google.com (216.58.199.36) 56 (84 ) bytes de dados ", use o Editor de Stream (sed) para detectar o primeiro conjunto de colchetes e extrair os dados nele, que é o endereço IP que estamos procurando.
NOTA: a expressão regex não funcionará se houver parênteses (também conhecido como colchetes circulares) na URL, mas esse seria um caso raro.
fonte