2017-06-09 3 views
0

Ich habe die folgende Frage für alle Java-Experten da draußen.Java InetAddress Name Auflösung

Ich versuche, eine zuverlässige Möglichkeit zur Erstellung eines LocalHost InetAddress -Objekts als Ausweichmöglichkeit zu InetAddress.getLocalHost() zu finden.

Ich bin vor das folgende Problem:

Es gibt Fälle, in denen meine Java-Anwendung aufgrund nicht auf eine Unknown geworfen, falls von ihm läuft die Netzwerkverbindung der Maschine beginnen würde, ist nach unten (Bereitstellung auf Windows-Rechnern).

Also bisher meine Ideen sind die folgenden:

1) Entweder versuchen den lokalen Host InetAddress Objekt aus der Netzwerkschnitt Enumeration zu bekommen (was ich ein wenig umständlich zu finden).

2) Versuchen Sie, die lokale Hostnamen-Zeichenfolge über die Systemumgebung abzurufen, und versuchen Sie dann, ein InetAddress-Objekt zu erstellen, indem Sie InetAddress.getByName() ausführen.

Ich bevorzuge den zweiten Ansatz, wie es viel einfacher und scheint ein bisschen schlanker, aber ich bekomme immer noch Probleme bekommen das InetAddress-Objekt, das ich will, falls die Netzwerkverbindung ist unten.

Nun meine Fragen, sind zwei:

1) In Anbetracht der Tatsache, dass ich eine Host-Datei innerhalb der genannten Maschine erhalten, die den Eintritt der Maschine enthält (Hostname - IP-Adresse) wäre es möglich, nicht für # 2 wie beabsichtigt zu arbeiten? Ich weiß, dass die DNS-Auflösung schließlich zu dem tatsächlichen Betriebssystem kommen wird, aber sollte Windows nicht in der Lage sein, ihre Hosts-Datei dazu zu verwenden, selbst wenn keine Netzwerkverbindung verfügbar war.

2) Ist es möglich, ein InetAddress-Objekt mit dem Hostnamen einer Maschine zu erstellen, aber ohne dass diese Maschine eine aktive Netzwerkverbindung hat - die Schnittstelle ist ausgefallen (wodurch die zuvor erwähnte UnkownHostException vermieden wird)?

Antwort

1

1) Es wäre wie vorgesehen, sofern:

  • das lokale DNS-Resolver konfiguriert wurde die Datei "hosts", bevor externen DNS-Server zu überprüfen und

  • der Eintrag korrekt war, und es bezog sich auf eine funktionierende IP-Adresse für den lokalen Host.

Eine Alternative ist, eine Loopback-Adresse (zum Beispiel "localhost"/127.0.0.1)

2) sicher zu verwenden. Verwenden Sie InetAddress.getByAddress(String, byte[]). Beachten Sie, dass der Name in DNS nicht überprüft wird.

Verwandte Themen