Es gibt mehrere Befehlszeilen - Dienstprogramme zu lösen Host - Namen ( host
, dig
, nslookup
), aber sie verwenden alle Name - Server ausschließlich, während Anwendungen im Allgemeinen Blick in /etc/hosts
erste (mit gethostbyname glaube ich).
Gibt es ein Befehlszeilendienstprogramm, um Hostnamen aufzulösen, die sich wie eine normale Anwendung verhalten, also zuerst nachsehen /etc/hosts
und dann erst einen Nameserver fragen?
(Mir ist bewusst, dass es wahrscheinlich 3 Zeilen von c sein würde, aber ich brauche es in einem etwas portablen Shell-Skript.)
awk '/hostname/ { print $1 }' /etc/hosts
?Antworten:
Dies ist leicht zu erreichen mit
getent
:getent
sucht nach allen Arten von Daten, die in konfiguriert sindnsswitch.conf
.quelle
dig
oder habennslookup
.Ein Werkzeug, das funktionieren würde, ist
getent
. Sie könnten alsogetent hosts www.google.com
oder verwendengetent hosts localhost
. Es werden Einträge aus den Datenbanken abgerufen, die in Ihrer Name Service Switch-Konfiguration angegeben sind/etc/nsswitch.conf
.quelle
files dns
für Hosts, dh / etc / hosts wird abgefragt und dann der DNS-Resolver. Ihre Konfiguration kann unterschiedlich sein.getent
. Vielen Dank für das Intro zu diesem Befehl.Sie können einen gethostbyname () (veralteten) Wrapper verwenden, wie:
Oder ein getaddrinfo () Wrapper wie:
Beachten Sie, dass getaddrinfo alle Instanzen als Liste zurückgibt. Der letzte Teil des Befehls wählt nur das erste Tupel aus. Dies kann auch IPv6-Adressen zurückgeben.
quelle
resolveip
werde dies tun.Seltsamerweise ist es Teil der MySQL-Server-Pakete auf RHEL und Ubuntu.
quelle
Sie können [Ihre Lieblingssprache hier] verwenden, um ein Skript zu schreiben, das getnameinfo aufruft . So sollten Binärdateien (wie Ping) vorgehen, damit Sie die gleiche Behandlung erhalten.
quelle
Verwenden Sie
getent ahosts
zum Beispiel:Sie erhalten alle IPv4- und IPv6-Adressen über den glibc-Resolver (verwenden Sie also
/etc/hosts
zuerst, wie normalerweise in konfiguriert/etc/nsswitch.conf
).Verwenden
getent hosts
Sie diese Option nicht , da Sie entweder IPv6- oder IPv4-Adressen erhalten (nicht beide) und das ausgewählte Protokoll möglicherweise nicht funktioniert. In der Tat werden IPv6-Adressen im Allgemeinen bevorzugt, aber an einigen Stellen werden IPv6-Daten von den Routern gefiltert (nicht unterstützt).quelle
"gethostbyname" Kommandozeilen - Version :
quelle
Sie könnten wirklich hacky sein und Folgendes verwenden
arp
:aber das wäre wirklich hässlich, also solltest du das nicht tun.
quelle
getent hosts
ist kaputt. Es bevorzugt IPv6-Adressen,gai.conf
sollte so konfiguriert werden, dass es IPv4 bevorzugt, aber ...Das Perl
gethostbyname
verwendet den Vorrang in/etc/nsswitch.conf
Das funktioniert also so, wie
getent hosts
es für mich funktionieren sollte.Ebenfalls:
sollte arbeiten.
quelle
getent ahosts
.Versuche dies:
quelle
Der folgende Befehl führt eine Suche über DNS / etc / hosts über eine direkte DNS-Serversuche durch.
Mit diesem Befehl wird versucht, eine Domain (in diesem Fall google.com) einmal mit einer Wartezeit von 2 Sekunden zu pingen. Rufen Sie die erste Zeile des PING-Befehls ab, in der "PING google.com (216.58.199.36) 56 (84)" angegeben ist ) bytes of data ", dann verwenden Sie den Stream Editor (sed), um den ersten Satz von Klammern zu erkennen und die darin enthaltenen Daten zu extrahieren, bei denen es sich um die gesuchte IP-Adresse handelt.
HINWEIS: Der reguläre Ausdruck funktioniert nicht, wenn die URL Klammern (auch als runde Klammern bezeichnet) enthält. Dies ist jedoch ein seltener Fall.
quelle