以Java编程方式获取DNS服务器的地址

以Java编程方式获取DNS服务器的地址,java,dns,Java,Dns,是否可以通过编程方式获取在解析主机名时要使用的DNS服务器的地址?我希望在Java中以独立于平台的方式来实现这一点。我知道在Linux、一些Windows API等中有一些方法可以做到这一点,但我可以从Java获得这一点吗?根据您使用的供应商VM,您可以使用JNDI或供应商特定的API(本例中为Sun/Oracle)来实现这一点。检查哪个描述了两者 我目前正在寻找一种在OpenJDK上做同样事情的方法,如果我发现什么,我会发布详细信息 编辑:看起来这些在OpenJDK上也可用,很有趣…您可以使用

是否可以通过编程方式获取在解析主机名时要使用的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之外。