Ricerca host che rispetta / etc / hosts


19

Le utility apprezzano hoste digti consentono di vedere l'indirizzo IP corrispondente al nome host.

C'è anche l' getentutilità che può essere utilizzata per eseguire query /etc/hostso altri database NSS.

Sto cercando una comoda utility standard (che è disponibile in Debian, diciamo) che risolve un nome host indipendentemente da dove è definito.

Dovrebbe essere più o meno equivalente a

ping "$HOST" | head -1 | perl -lne '/\((.*?)\)/ && print $1'

5
Cosa c'è di sbagliato esattamente getent?
Patrick,

2
Sì, non credo che potrebbe essere più conveniente di Getent.
Bratchley,

@Patrick: hmm, non avevo realizzato getentanche i look nel DNS (pensavo solo che guardasse dentro /etc/hosts). Ora che l'ho provato, ecco cosa c'è che non va getent: per google.com, restituisce un singolo indirizzo e quell'indirizzo è IPv6. Il che non è utile, dal momento che sono su una rete IPv4 e il mio comando in realtà stamperebbe un indirizzo IPv4.
Roman Cheplyaka,

@RomanCheplyaka - Vedi la risposta di eppesuig che mostra come usare getent per cercare solo indirizzi IPv4: unix.stackexchange.com/a/71392/7453
slm

Risposte:



14

Se il problema è che non vuoi risolvere questi nomi usando ipv6, chiedi a getent di usare solo ipv4. Questo enumererà tutti gli indirizzi 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

Per coloro che si preoccupano di dimenticare la storia (cioè IPv4), utilizzare ahostsv6.
Luc

2
Per coloro che vogliono evitare di considerare le differenze tra IPv4 e IPv6, utilizzare getent ahosts google.com.
Mikko Rantalainen,

6

Il fatto è che ci sono diverse API per risolvere i nomi degli host come gethostbyname, getaddrinfoe inet_ptone alcuni di quelli in grado di restituire più di un indirizzo e / o si può interrogare il tipo di indirizzo che si desidera.

Se vuoi un modo portatile per ottenere un indirizzo IPv4, forse:

perl -MSocket -le 'print inet_ntoa inet_aton shift' www.google.com

2

(Questa risposta si applica solo se si è root sul computer.)

Anche questo mi dava fastidio, e poi mi sono standardizzato con dnsmasq su tutte le mie macchine. Dnsmasq è una cache DNS leggera. Come vantaggio secondario, serve il contenuto di /etc/hostsover DNS.


2

gethostip -d name.domaindal syslinuxpacchetto su Ubuntu (e probabilmente Debian). -dgenera il formato decimale.


0

Ho usato la mia pura conoscenza del perl e ho realizzato un piccolo script con gestione degli errori:

/ 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";

Grazie a Stéphane Chazelas per l'idea iniziale

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.