So konfigurieren Sie hostname Lösung zu verwenden, eine benutzerdefinierte DNS-server in Java?
java.net.InetAddress löst Hostnamen unter Verwendung der lokalen Maschine Standard-host-name-resolver standardmäßig:
Host-Namen zu IP-Adressen-Auflösung erfolgt durch die Verwendung einer Kombination von lokalen Computer-Konfiguration Informationen und Netzwerk-naming-Dienste wie Domain Name System (DNS) und Network Information Service(NIS). Die Besondere Benennung der Dienste(s) verwendet wird, ist standardmäßig den lokalen Rechner konfiguriert,. Für jeden Hostnamen, seine entsprechende IP-Adresse zurückgegeben wird. [Quelle]
Wie können wir dieses Verhalten konfigurieren, ohne änderung der lokalen Maschine Standard-hostname resolver?
Zum Beispiel, ist es eh zu konfigurieren java.net.InetAddress solche, die es löst host-Namen 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, die explizit erstellen DNS-Paket Anfragen, senden Sie diese an die Server entweder über java.net.DatagramSocket oder java.net.Buchse, und analysieren Sie die Antworten?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Java 9 entfernt diese Fähigkeit. Sie benötigen einen Drittanbieter-DNS-client-Bibliothek.
Wenn Sie mit Java 8 oder älter, die Sie tun können:
Können Sie die system property
sun.net.spi.nameservice.nameservers
dokumentiert, wie durch diese site.java.net.InetAddress
. Wenn Sie ok sind, mit einem anderen Mechanismus, dann könnte man natürlich auch ein 3rd-party-DNS-Bibliothek ( z.B. dnsjava ). Der einzige wirkliche Grund, warum die Eigenschaften ändern kann, ist, wenn die Oracle-überholungen derjava.net
Umsetzung in einer zukünftigen version von Java. Wenn dies geschieht, werden Sie wahrscheinlich bieten eine neue Lösung für dieses problem zu diesem Zeitpunkt als gut.java.net
in Java 9, so ist diesun.net
Klassen benötigt, um diese abziehen, nicht mehr existieren.Für Java-Versionen bis zu 8, hier ist der code, den ich schrieb, hart-code ein
foo
system name (DNS-Auflösung in Java für test cases übergeben. Seine avantage ist um hängen Sie Ihre spezifischen Eintrag geben(s), um Standard-Java-runtime-DNS-Auflösung.Empfehle ich nicht zu laufen, es in der Produktion. Gezwungen reflektierende Zugangs-und Java-runtime nicht-öffentlichen Implementierungsklassen verwendet werden !
Hoffe, das hilft, aber wieder mit Vorsicht verwendet werden !
mit der folgenden Schnittstelle und ermöglicht den Zugriff auf java.net.* es ist möglich, eigene DNS-Anbieter mit JDK8 und JDK9. Der neue Provider ist installiert, via
"INameService.installieren(neue MyNameService());"