【发布时间】:2013-07-02 08:14:53
【问题描述】:
在我第一篇处理 DNS 的帖子之后,仍然没有解决:JVM and OS DNS Caching ,我面临一个新问题。
首先是我的用例:我想检查我的私有 DNS 是否存在。如果不是,我想使用通用 DNS(例如 8.8.8.8)。
我的私有 DNS(ubuntu 上的一个 bind9 与 192.168.1.188)作为特定记录:test.testdnd.fr -> 192.168.1.100
所以我想我可以这样做:
if(InetAddress.getByAddress(my_dns_ip_in_byte).isReachable()){
System.setProperty("sun.net.spi.nameservice.provider.1", "dns,sun");
System.setProperty("sun.net.spi.nameservice.nameservers", 192.168.1.188);
}else{
System.setProperty("sun.net.spi.nameservice.provider.1", "dns,sun");
System.setProperty("sun.net.spi.nameservice.nameservers", "8.8.8.8");
}
InetAddress.getHostByAddress(test.testdnd.fr) -> unknow host exception
但如果我只做:
System.setProperty("sun.net.spi.nameservice.provider.1", "dns,sun");
System.setProperty("sun.net.spi.nameservice.nameservers", 192.168.1.188);
InetAddress.getHostByAddress(test.testdnd.fr) -> 192.168.1.100
所以只要我在设置 system.property 之前调用了 InetAddress 方法,似乎 system.property 没有任何效果。可能是因为 JVM 在调用 InetAddress 方法时会加载系统 DNS 值,即使它不使用 DNS 解析。
这是 JVM 中的标准行为还是我失去了什么?
欢迎任何帮助,
【问题讨论】:
-
它不是真正的重复,我想使用私人 DNS 服务器。
-
你确定
InetAddress.getByAddress(my_dns_ip_in_byte).isReachable()正在返回 true 吗? (如果你还没有检查过,你应该在 if 块中添加一些调试输出来查看) -
是的 InetAddress.getByAddress(my_dns_ip_in_byte).isReachable() 正在返回 true,如果我在两个大括号块中都放了一个日志,我发现它不会通过“else”块。