Pesquisa de host que respeita / etc / hosts

17

Utilitários como host e dig permitem que você veja o endereço IP correspondente ao nome do host.

Há também o utilitário getent que pode ser usado para consultar /etc/hosts ou outros bancos de dados NSS.

Estou procurando um utilitário padrão conveniente (que está disponível no Debian, por exemplo) que resolve um nome de host, independentemente de onde ele está definido.

Deve ser mais ou menos equivalente a

ping "$HOST" | head -1 | perl -lne '/\((.*?)\)/ && print $1'
    
por Roman Cheplyaka 05.04.2013 / 22:14

6 respostas

4

O único comando que sei que faz o que você quer é resolverip:

link

No entanto, ele vem apenas com o mysql-server, que pode não ser ideal para instalar em qualquer lugar.

    
por 05.04.2013 / 23:09
13

Se o problema é que você não deseja resolver esses nomes usando o ipv6, peça ao getent para usar somente o ipv4. Isto irá enumerar todos os endereços ipv4:

giuseppe@blatta:~$ getent ahostsv4 www.google.com | cut -d' ' -f1 | sort -u
173.194.40.80
173.194.40.81
173.194.40.82
173.194.40.83
173.194.40.84
    
por 05.04.2013 / 23:37
6

O problema é que existem várias APIs para resolver nomes de host, como gethostbyname , getaddrinfo e inet_pton , e algumas delas podem retornar mais de um endereço e / ou você pode consultar o tipo de endereço desejado. / p>

Se você quiser uma maneira portátil de obter um endereço IPv4 um , talvez:

perl -MSocket -le 'print inet_ntoa inet_aton shift' www.google.com
    
por 05.04.2013 / 23:48
2

(Esta resposta só se aplica se você estiver root na máquina.)

Eu costumava ficar aborrecido com isso também, e então eu padronizava a execução de dnsmasq em todas as minhas máquinas. O Dnsmasq é um cache DNS leve. Como um benefício secundário, ele serve o conteúdo de /etc/hosts sobre o DNS.

    
por 06.04.2013 / 00:24
2

gethostip -d name.domain do pacote syslinux no Ubuntu (e provavelmente no Debian). -d imprime o formato decimal.

    
por 03.11.2013 / 21:57
0

Eu usei meu conhecimento perl puro e fiz um pequeno script com tratamento de erros:

/ usr / local / bin / gethostip:

#!/usr/bin/perl

# inspired by: https://unix.stackexchange.com/questions/71379/host-lookup-that-respects-etc-hosts#71393

use strict;
use Socket;

my $name = $ARGV[0];
if ($name eq '') {
  print STDERR "Usage: gethostip <hostname>\n";
  exit 1;
}
my $ip = inet_aton($name);
die("Unable to resolve host name $name") if ($ip eq '');
my $ipstr = inet_ntoa($ip);
print "$ipstr\n";

Thx para Stéphane Chazelas pela idéia inicial

    
por 11.10.2015 / 16:06

Tags