选择DNS服务器以解析Java中的主机名

选择DNS服务器以解析Java中的主机名,java,dns,resolve,Java,Dns,Resolve,在Java中,使用InetAddress类将主机名解析为IP地址相当容易,如下所示: InetAddress address = InetAddress.getByName("www.example.com"); 但此方法使用运行系统使用的DNS服务器 有没有办法指定用于解析的DNS服务器?如果使用Sun Java,可以使用以下代码: //Override system DNS setting with Google free DNS server System.setProperty("su

在Java中,使用InetAddress类将主机名解析为IP地址相当容易,如下所示:

InetAddress address = InetAddress.getByName("www.example.com");
但此方法使用运行系统使用的DNS服务器


有没有办法指定用于解析的DNS服务器?

如果使用Sun Java,可以使用以下代码:

//Override system DNS setting with Google free DNS server
System.setProperty("sun.net.spi.nameservice.nameservers", "8.8.8.8");
System.setProperty("sun.net.spi.nameservice.provider.1", "dns,sun");

查看这篇博文:了解更多详细信息。

Java中有DNS库,您可以使用它们,非常棒!非常感谢您的回答!一个问题。如果我快速解析域名(每分钟300个),那么(例如谷歌DNS服务器)DNS服务器是否很重/允许?一个潜在的问题是这是全局性的。运行Oracle jre 1.8.0_111。首选通过命令行设置上述属性(即-Dsun.net.spi.nameservice.provider.1=“dns,sun”-Dsun.net.spi.nameservice.nameservers=8.8.8)在linux上,使用tcpdump-n“udp port 53”可以验证正在使用的DNS服务器,许多java实现仅将DNS查找缓存30秒,使用sun.net.inetaddr.ttl标志扩展此功能通常是一个好主意,例如-Dsun.net.inetaddr.ttl=1800将不会导致对特定域的另一次查找,直到30分钟过去。