2012-05-11 15 views
9

In meiner Java-Anwendung, wenn Benutzer die IP-Adresse eingeben, müssen wir den Host-Namen anzeigen, wenn Host-Name gegeben ist, dann müssen wir die IP des Hosts anzeigen.Umwandlung einer IP-Adresse in Host-Name

Zum Beispiel, wenn der Benutzer eine IP-Adresse wie 173.194.36.37 Anwendung eingibt, sollte google.com angezeigt werden und umgekehrt.

Gibt es irgendwelche Dienstprogramme für diesen Vorgang?

+0

Sie wissen, dass eine IP-Nummer mehrere Hostnamen haben kann? zum Beispiel hat 127.0.0.1 * sowohl * localhost als auch localhost.localdomain – vidstige

+0

@vidstichige Nicht mit Reverse-DNS. Hier wird die IP genau einem Hostnamen zugeordnet, dem sogenannten "kanonischen Hostnamen". – glglgl

+1

Sie können kein eindeutiges Ergebnis erhalten siehe http://aruljohn.com/ip2hostname.html für 173.194.36.37 siehe bom04s02-in-f5.1e100.net nicht google.com! – SjB

Antwort

17

Wenn Sie in Java-Codierung, versuchen InetAddress

InetAddress addr = InetAddress.getByName("173.194.36.37"); 
String host = addr.getHostName(); 
System.out.println(host); 
+4

Offensichtlich vergessen Sie nicht die Ausnahmebehandlung für UnknownHostException. – ccKep

2

Was Sie suchen, ist etwas, das genannt wird. This project scheint das zu sein, wonach Sie suchen.

+0

Keine Notwendigkeit, Bibliotheken von Drittanbietern einzubinden, wenn 'InetAddress.getHostName()' vorhanden ist. –

+2

@PhilippReichart Die Frage lautet: "Gibt es irgendwelche Dienstprogramme", also denke ich, warum nicht Open-Source-Drittanbieter-Bibliotheken. –

+0

@PrakashK Einfachheit. Warum bringen Sie * über 100 * Klassen ein, wenn Sie alles erreichen können, indem Sie eine existierende Methode aufrufen? Viel weniger bewegliche Teile, viel weniger falsch. –

0

In Bezug auf die Domain-Namen verwenden, gibt es in Dienstprogramme nicht gebaut, nein. Sie können den Namen eines Hosts (aber nicht den Domänennamen) mit getCanonicalHostName() auf InetAddress erhalten - das sollte funktionieren. Die beste Antwort hier verbunden mit dem DNS Java Projekt, das Sie den Domain-Namen erhalten wird.

Beispielcode zu verbinden, und den Host-Namen erhält aus, einer des Servers von Google ist unten angegeben:

public class GetHostName { 
public static void main(String[] args) throws Exception { 
    InetAddress address = InetAddress.getByAddress(new byte[]{74, 125,(byte) 227, 7}); 
    System.out.println(address.getCanonicalHostName()); 
} 
} 
2

Das Projekt SomeKittens Sie genannten Server sieht aus wie ein vollständige DNS in Java geschrieben, die Macht Sei mehr als du brauchst. Werfen Sie einen Blick auf java.net.InetAddress:

java.net.InetAddress.getByName("example.com").getHostAddress(); 
+0

Für Google.com gibt mir dieser Code "74.125.237.100" als Ergebnis. – Jon

+0

Und das ist richtig, oder? Wenn ich auf http://74.125.237.100/ gehe, lande ich bei google.com. – Brian

+0

Nein. Das OP hat nach etwas gefragt, das Ihnen den Domänennamen mit einer IP-Adresse geben würde. Der obige Code gibt die vollständige Umkehrung - eine IP-Adresse bei einem Domainnamen. – Jon