Recherche d'hôte respectant / etc / hosts

19

Les utilitaires aiment hostet digvous permettent de voir l'adresse IP correspondant au nom d'hôte.

Il existe également l' getentutilitaire qui peut être utilisé pour interroger /etc/hostsou d'autres bases de données NSS.

Je cherche un utilitaire standard pratique (qui est disponible dans Debian, par exemple) qui résout un nom d'hôte indépendamment de l'endroit où il est défini.

Il devrait être plus ou moins équivalent à

ping "$HOST" | head -1 | perl -lne '/\((.*?)\)/ && print $1'
Roman Cheplyaka
la source
5
Qu'est-ce qui ne va pas exactement getent?
Patrick
2
Ouais, je ne pense pas que ça pourrait devenir plus pratique que getent.
Bratchley
@Patrick: hmm, je ne me suis pas rendu compte getentaussi des regards dans DNS (je pensais que ça ne regarde que dedans /etc/hosts). Maintenant que je l'ai essayé, voici ce qui ne va pas getent: car google.com, il renvoie une seule adresse, et cette adresse est IPv6. Ce qui n'est pas utile, car je suis sur un réseau IPv4 et ma commande imprimerait en fait une adresse IPv4.
Roman Cheplyaka
@RomanCheplyaka - Voir la réponse d'epesuig qui montre comment utiliser getent pour rechercher uniquement les adresses IPv4: unix.stackexchange.com/a/71392/7453
slm

Réponses:

4

La seule commande que je sache qui fait ce que vous voulez est resolip:

http://linux.die.net/man/1/resolveip

Cependant, il n'est fourni qu'avec mysql-server, ce qui n'est peut-être pas idéal à installer partout.

Georgyo
la source
14

Si le problème est que vous ne voulez pas résoudre ces noms en utilisant ipv6, demandez simplement à getent d'utiliser uniquement ipv4. Cela énumérera toutes les adresses 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
eppesuig
la source
Pour ceux qui veulent oublier l'histoire (c'est-à-dire IPv4), utilisez ahostsv6.
Luc
2
Pour ceux qui veulent éviter de considérer les différences entre IPv4 et IPv6, utilisez getent ahosts google.com.
Mikko Rantalainen
6

Le fait est qu'il existe plusieurs API pour résoudre les noms d'hôte comme gethostbyname, getaddrinfoet inet_ptoncertaines d'entre elles peuvent renvoyer plus d'une adresse et / ou vous pouvez interroger le type d'adresse que vous souhaitez.

Si vous voulez un moyen portable d'obtenir une adresse IPv4, alors peut-être:

perl -MSocket -le 'print inet_ntoa inet_aton shift' www.google.com
Stéphane Chazelas
la source
2

(Cette réponse ne s'applique que si vous êtes root sur la machine.)

J'étais aussi agacé par cela, puis j'ai standardisé l'exécution de dnsmasq sur toutes mes machines. Dnsmasq est un cache DNS léger. Comme avantage secondaire, il sert le contenu de /etc/hostsplus de DNS.

Gilles 'SO- arrête d'être méchant'
la source
2

gethostip -d name.domaindu syslinuxpaquet sur Ubuntu (et probablement Debian). -daffiche le format décimal.

dan3
la source
0

J'ai utilisé ma pure connaissance de Perl et fait un petit script avec la gestion des erreurs:

/ usr / local / bin / gethostip:

#!/usr/bin/perl

# inspired by: /unix/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";

Merci à Stéphane Chazelas pour l'idée initiale

Daniel Alder
la source