Se você tiver acesso ao Perl, eu rolei o meu (achei na internet e usei):
#!/usr/bin/perl
use Socket;
$host = shift @ARGV;
die("usage: gethostbyname hostname\n") unless(defined($host));
$packed_ip = gethostbyname($host);
if (defined $packed_ip) {
$ip_address = inet_ntoa($packed_ip);
print "$ip_address\n";
exit 0
} else {
warn "$host not found\n";
exit 1
}
Este código vem do SF Q & A intitulado: Utilitário de linha de comando do Linux para resolver nomes de host usando / etc / hosts primeiro .
Exemplos
$ ./gethostbyname.pl skinner
192.168.1.3
$ ./gethostbyname.pl www.google.com
74.125.225.84
$ ./gethostbyname.pl localhost
127.0.0.1
Eu usei o método acima quando o código estava sendo executado em várias máquinas Unix, não apenas no Linux e, portanto, getent
não era uma opção.
getent
Eu sei que a página de manual do getent
deixa você pensando que getent
irá procurar apenas nos bancos de dados de arquivos, mas acredito que ele passa por quaisquer meios definidos em /etc/nsswitch.conf
. Portanto, se ele indicar dns
como um valor, acredito que ele interrogará o servidor DNS configurado em /etc/resolv.conf
. Supondo que haja um definido nesse arquivo.
Nos meus testes eu não tenho uma entrada no meu arquivo, /etc/hosts
, para o host "skinner" e ainda getent
resolve tudo bem via DNS.
$ getent hosts skinner
192.168.1.3 skinner.bubba.net
$ grep skinner /etc/hosts
$