在Java中选择用于解析主机名的DNS服务器

18

在Java中,通过使用InetAddress类,将主机名解析为IP地址相当容易,就像这样:

InetAddress address = InetAddress.getByName("www.example.com");

但是这种方法使用的是正在运行系统所使用的DNS服务器。

是否有任何方法可以指定用于解析的DNS服务器?


Java中有DNS库,您可以使用它们。 - fge
1个回答

17

如果您使用 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个),是否会对(例如Google DNS服务器)DNS服务器造成负担/允许这样做? - Giorgos Fandomas
一个潜在的问题是这是全局的。 - Paul Draper
运行 Oracle jre 1.8.0_111。建议通过命令行设置上述属性(即 -Dsun.net.spi.nameservice.provider.1="dns,sun" -Dsun.net.spi.nameservice.nameservers=8.8.8.8),以免它们被埋在代码中而被遗忘。 - paulh
在Linux上,可以使用 tcpdump -n 'udp port 53' 来验证正在使用哪个 DNS 服务器。许多Java实现仅缓存DNS查找30秒钟,通常建议使用 sun.net.inetaddr.ttl 标志来扩展此时间。例如,*-Dsun.net.inetaddr.ttl=1800* 将导致特定域名不进行另一次查找,直到经过30分钟。 - paulh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接