Il existe plusieurs utilitaires de ligne de commande pour les noms d'hôte de résolution ( host
, dig
, nslookup
), mais ils utilisent tous des serveurs de noms exclusivement, tandis que les applications en aspect général en /etc/hosts
premier ( en utilisant gethostbyname je crois).
Existe-t-il un utilitaire de ligne de commande permettant de résoudre les noms d’hôte qui se comporte comme une application habituelle, recherchant donc en /etc/hosts
premier et ensuite uniquement en demandant à un serveur de noms?
(Je suis conscient que ce serait probablement comme 3 lignes de c, mais j'en ai besoin à l'intérieur d'un script shell quelque peu portable.)
awk '/hostname/ { print $1 }' /etc/hosts
aide?Réponses:
Ceci est facilement réalisé avec
getent
:getent
fera des recherches pour tout type de données configuré dansnsswitch.conf
.la source
dig
ounslookup
.Un outil qui pourrait fonctionner est
getent
. Donc, vous pouvez utilisergetent hosts www.google.com
, ougetent hosts localhost
. Il récupérera les entrées des bases de données comme spécifié dans la configuration de votre commutateur de service de noms/etc/nsswitch.conf
.la source
files dns
pour les hôtes, ce qui signifie que / etc / hosts est consulté, puis le résolveur DNS. Votre configuration peut être différente.getent
. Merci pour l'intro à cette commande.Vous pouvez utiliser un wrapper gethostbyname () (obsolète) comme:
Ou un wrapper getaddrinfo () comme:
Notez que getaddrinfo retournera toutes les instances sous forme de liste. La dernière partie de la commande ne sélectionne que le premier tuple. Cela peut également renvoyer des adresses IPv6.
la source
resolveip
va le faire.Bizarrement, cela fait partie des paquets mysql-server sur RHEL et Ubuntu.
la source
Vous pouvez utiliser [votre langue préférée ici] pour écrire un script qui appelle getnameinfo . C'est comme ça que les binaires (comme ping) devraient le faire, donc vous êtes assuré de recevoir le même traitement.
la source
Utilisez
getent ahosts
, par exemple:Vous obtiendrez toutes les adresses IPv4 et IPv6 via le résolveur glibc (donc en utilisant d'
/etc/hosts
abord, comme cela est habituellement configuré dans/etc/nsswitch.conf
).Ne pas utiliser
getent hosts
, cela vous donnera des adresses IPv6 ou IPv4 (pas les deux), et le protocole choisi risque de ne pas être celui qui ne fonctionne pas. En effet, les adresses IPv6 sont généralement préférées, mais à certains endroits, les données IPv6 sont filtrées (non prises en charge) par les routeurs.la source
Version en ligne de commande "gethostbyname" :
la source
Vous pourriez être vraiment hacky et utiliser
arp
:mais ce serait vraiment moche alors vous ne devriez pas faire ça.
la source
getent hosts
est cassé. Il préfère les adresses IPv6,gai.conf
devrait être configuré pour préférer ipv4 mais ....Le Perl
gethostbyname
utilise la priorité dans/etc/nsswitch.conf
Donc, cela fonctionne comme
getent hosts
devrait fonctionner pour moi.Également:
devrait marcher.
la source
getent ahosts
.Essaye ça:
la source
La commande suivante effectuera une recherche via DNS / etc / hosts sur une recherche directe du serveur DNS.
Cette commande tente d'envoyer une requête ping à un domaine (dans ce cas, google.com) avec un délai d'attente de 2 secondes et d'obtenir la première ligne de la commande PING qui indique "PING google.com (216.58.199.36) 56 (84 ) octets de données ", puis utilisez Stream Editor (sed) pour détecter le premier ensemble de crochets et extraire les données qu’il contient, qui correspond à l’adresse IP recherchée.
Remarque: l'expression regex ne fonctionnera pas si l'URL contient des parenthèses (ou des crochets circulaires), mais ce serait un cas rare.
la source