IP-Adresse eines Hostnamens auflösen

85

Ich habe die IP-Adresse des DNS-Servers und einen Hostnamen.

Wie kann ich unter Verwendung von Java die IP-Adresse des von diesem DNS-Server zurückgegebenen Hostnamens anhand der IP-Adresse und des Hostnamens ermitteln?

Dunkle Materie
quelle
3
dig <hostname>in einer Kommandozeile?
Ceejayoz
Wie mache ich dasselbe im Java-Code und wo soll ich die IP-Adresse und den Hostnamen des DNS-Servers verwenden?
Dunkle Materie
Bei einer anderen Abfrage müssen wir auf jeden Fall die DNS-Server-IP-Adresse angeben oder versuchen, diese standardmäßig zu finden. Ich bin hier etwas verwirrt, ob wir auch nur den Hostnamen oder den Hostnamen + die DNS-Server-IP-Adresse verwenden müssen.
Dunkle Materie
1
Die Suche nach der Adresse unter Verwendung des Namens ist nicht kompliziert. Solange Sie nur den Standard-Resolver des Systems verwenden. Also: Müssen Sie wirklich die DNS-Serveradresse verwenden?
AH
Ich habe die gleiche Frage: Benötige ich wirklich eine DNS-Serveradresse oder wird die Adresse standardmäßig aufgelöst? Übrigens verwende ich einen AIX Unix-Server.
Dunkle Materie

Antworten:

126

Schauen Sie sich InetAddressdie getHostAddress()Methode an.

InetAddress address = InetAddress.getByName("www.example.com"); 
System.out.println(address.getHostAddress()); 
thegrinner
quelle
Sagen Sie, wenn ich eine DNS-IP-Adresse 10.37.221.152 habe und ein Hostname "www.student.com" sagt, wie kann ich dann die IP-Adresse finden.
Dunkle Materie
3
@DarkMatter: InetAddresssollte die DNS-aufgelöste Adresse erhalten, wenn Sie danach fragen getHostAddress(). Ich bin mir nicht sicher, ob Sie die Verwendung eines bestimmten DNS-Servers erzwingen können .
Thegrinner
Es muss sich also idealerweise von selbst auflösen, ohne dass der Programmierer die DNS-Serveradresse explizit angibt, oder?
Dunkle Materie
1
@ DarkMatter Ja. Ich glaube, es verwendet jeden DNS-Server, der auf dem Computer selbst eingestellt ist.
Thegrinner
29

Sie können es so machen:

for(InetAddress addr : InetAddress.getAllByName("stackoverflow.com"))
    System.out.println(addr.getHostAddress());
Walery Strauch
quelle
9

Hierfür können Sie InetAddress verwenden. Versuchen Sie den folgenden Code,

InetAddress address = InetAddress.getByName("www.yahoo.com");
System.out.println(address.getHostAddress());
System.out.println(address.getHostName());
Abhinaba Basu
quelle
3

Wie von allen oben genannten vorgeschlagen, können Sie verwenden, InetAddress.getByName("hostName")aber dies kann Ihnen eine zwischengespeicherte IP geben. Lesen Sie die Java-Dokumentation für die gleiche. Wenn Sie eine IP von DNS erhalten möchten, können Sie Folgendes verwenden:

InetAddress[] ipAddress = DNSNameService.lookupAllHostAddr("hostName");
daksh
quelle
Zusätzlich zu dem, was @daksh hervorgehoben hat, können Sie den DNS-Antwortcache wie hier vorgeschlagen deaktivieren. Beachten Sie jedoch den Zeitpunkt des Deaktivierens des Caches sowie das Zwischenspeichern von DNS-Antworten, die von Ihrem Betriebssystem sowie anderen DNS-Servern wie hier vorgeschlagen erstellt wurden . Hoffe das hilft
CrazyGreenHand
Aus irgendeinem Grund gibt mir dieser Aufruf ein positives Ergebnis für jeden Hostnamen. Ich dachte, ich verwende standardmäßig meine IP, aber nein, es gibt mir eine bestimmte IP für einen unbekannten Host.
Imaskar