以Java编程方式获取DNS服务器的地址
是否可以通过编程方式获取在解析主机名时要使用的DNS服务器的地址?我希望在Java中以独立于平台的方式来实现这一点。我知道在Linux、一些Windows API等中有一些方法可以做到这一点,但我可以从Java获得这一点吗?根据您使用的供应商VM,您可以使用JNDI或供应商特定的API(本例中为Sun/Oracle)来实现这一点。检查哪个描述了两者 我目前正在寻找一种在OpenJDK上做同样事情的方法,如果我发现什么,我会发布详细信息 编辑:看起来这些在OpenJDK上也可用,很有趣…您可以使用:以Java编程方式获取DNS服务器的地址,java,dns,Java,Dns,是否可以通过编程方式获取在解析主机名时要使用的DNS服务器的地址?我希望在Java中以独立于平台的方式来实现这一点。我知道在Linux、一些Windows API等中有一些方法可以做到这一点,但我可以从Java获得这一点吗?根据您使用的供应商VM,您可以使用JNDI或供应商特定的API(本例中为Sun/Oracle)来实现这一点。检查哪个描述了两者 我目前正在寻找一种在OpenJDK上做同样事情的方法,如果我发现什么,我会发布详细信息 编辑:看起来这些在OpenJDK上也可用,很有趣…您可以使用
import org.xbill.DNS.*;
字符串dnsServers[]=ResolverConfig.getCurrentConfig().servers();
(但是,您不知道在给定的查找中将使用哪些潜在的多台服务器)JDK 8示例:
...
import sun.net.dns.ResolverConfiguration;
...
List nameServers = ResolverConfiguration.open().nameservers();
nameServers.forEach((dns)->System.out.println(dns));
...
可能是重复的不,不是。一旦您知道名称服务器是什么,它将获取有关名称服务器的信息。我想知道如何找到将要使用的名称服务器。注意:在我相当标准的Ubuntu 16.04安装中,这只提供了
127.0.1.1
这是本地dnsmasq(?)dns缓存服务器是否/etc/resolv.conf
也包含127.0.0.1,或者nslookup www.stackoverflow.com
是否也显示一行服务器:127.0.0.1
(另请参阅)?如果是这样的话,我想在不知道“behind”是如何设置的情况下,很难知道缓存服务器后面的DNS服务器是什么。resolv.conf
只包含nameserver 127.0.1.1
和nslookup
,正如预期的那样服务器:127.0.1.1
-一旦您向networkmanager询问有关DNS的问题在我的例子中,您可以看到主dns是本地网络上的一个设备,因此也不是很有用,但您至少在pc之外。