java.net.InetAddress löst Host-Namen der lokalen Maschine Standard-Host-Name-Resolver standardmäßig mit:Wie wird die Hostnamenauflösung für die Verwendung eines benutzerdefinierten DNS-Servers in Java konfiguriert?
Hostnamen-zu-IP-Adressauflösung durch die Verwendung einer Kombination von lokalen Maschinen Konfigurationsinformationen und Netzwerk erfolgt Dienste wie Namensgebung das Domain Name System (DNS) und der Network Information Service (NIS). Die bestimmten Benennungsdienste, die verwendet werden, sind . Standardmäßig ist das lokale Gerät als konfiguriert. Für jeden Hostnamen wird die entsprechende IP-Adresse zurückgegeben. [source]
Wie können wir dieses Verhalten konfigurieren, ohne den lokalen Rechner des Standardhostnamen Resolver zu modifizieren?
Zum Beispiel ist es sowieso zu konfigurieren java.net.InetAddress so, dass es Hostnamen durch OpenDNS (208.67.222.222, 208.67.220.220) oder Google Public DNS (2001: 4860: 4860 :: 8888, 2001: 4860: 4860: : 8844)?
Oder ist die einzige Lösung zum expliziten Erstellen von DNS-Paketanforderungen, senden Sie sie an die Server über java.net.DatagramSocket oder java.net.Socket, und analysieren Sie die Antworten?
Wie auf derselben Website dokumentiert: "Diese Eigenschaften werden in zukünftigen Versionen möglicherweise nicht unterstützt." Gibt es einen anderen Weg, das zu erreichen? – bernatp
Nein. Wenn Sie 'java.net.InetAddress' verwenden möchten. Wenn Sie einen anderen Mechanismus verwenden, können Sie natürlich eine DNS-Bibliothek eines Drittanbieters verwenden (z. B. [dnsjava] (http://www.dnsjava.org/)). Der einzige wirkliche Grund für die Änderung der Eigenschaften ist, dass Oracle die 'java.net' -Implementierung in einer zukünftigen Version von Java überarbeitet. Wenn dies geschieht, werden sie wahrscheinlich auch zu diesem Zeitpunkt eine neue Lösung für dieses Problem bieten. – Pace
Sie überholten 'java.net' in Java 9, so dass die 'sun.net'-Klassen, die es gab, nicht mehr existieren. – ndm13