Qual é a maneira mais fácil de obter o endereço IP de um nome de host?
Eu estava pensando em tentar um ping
e analisá-lo a partir da saída. No entanto, isso não parece muito bom e provavelmente não funcionará da mesma maneira em todos os sistemas.
Pesquisei um pouco e encontrei soluções com nslookup
, mas isso não funciona para nomes de host no /etc/hosts
.
Respostas:
Você pode fazer isso com chamadas de sistema padrão. Aqui está um exemplo no Perl:
produz a saída:
(Na linha de comando, o mesmo script pode ser escrito como
perl -MSocket -MData::Dumper -wle'my @addresses = gethostbyname("google.com"); my @ips = map { inet_ntoa($_) } @addresses[4 .. $#addresses]; print Dumper(\@ips)'
:)Você pode fazer isso de maneira semelhante em outros idiomas - consulte a página de manual das chamadas do sistema em
man -s3 gethostbyname
etc.fonte
perl -MSocket -MData::Dumper -wle'my @addresses = gethostbyname("www.google.com"); my @ips = map { inet_ntoa($_) } @addresses[4 .. $#addresses]; print $ips[0]'
.sed -e '/some people consider Perl a better form/s/better/worse/'
SCNRhost <hostname>
Ex:
Editar
No Linux (e algumas variantes do OS X, pelo menos), você pode usar o
resolveip
que faz parte do pacote do servidor MySQL:fonte
/etc/hosts
.) Tentehost localhost
.serv ~ $ host localhost \n localhost has address 127.0.0.1
resolveip
.resolveip
não está instalado por padrão no meu Debian.Este post antigo parece ter muitas soluções criativas.
Se eu precisar garantir que também
/etc/hosts
seja acessado, costumo usargetent hosts somehost.com
Isso funciona, pelo menos se o `/etc/nsswitch.conf 'tiver sido configurado para usar arquivos (como geralmente é).
fonte
ahosts
retorna informações de várias linhas.Para o IPv4, existe um programa padrão que funciona imediatamente usando o resolvedor, incluindo / etc / hosts:
Faz parte do Debian, instale-o com:
Para outros protocolos além do IPv4 (como o IPv6), atualmente não conheço uma ferramenta semelhante. Atualização: Por causa disso, acabei de escrever uma pequena ferramenta capaz de resolver o IPv6 também:
https://github.com/hilbix/misc/blob/master/src/ipof.c
Ele é pensado para um uso rápido e sujo do shell, como também
gethostip
permite o IPv6:Também pode ser usado interativamente, por exemplo:
HTH
fonte
Bem, minha solução atual:
fonte
sed
se comporta um pouco diferente em cada sistema. :) Que irritante. Mudei um pouco, acho que deve funcionar em qualquer lugar agora.Por que não
dig +short hostname
?(consulta DNS)
fonte
/etc/hosts
em consideração.Em alguns Unices, o seguinte funcionará:
Por exemplo, no Mac OS X, recebo o seguinte:
fonte
arp -n hostname
mostra o IP.O uso
ping
não é tão ruim, pois geralmente você não possui dependências fortes.Aqui está a função que eu usei nos sistemas Linux:
fonte
fonte