【问题标题】:Clean DNS server in JVM清理 JVM 中的 DNS 服务器
【发布时间】: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”块。

标签: java dns jvm


【解决方案1】:

问题是名称服务提供程序仅在InetAddress 中加载一次并缓存以供进一步使用。加载发生在 InetAddress 类的静态初始化程序中。所以一旦InetAddress 被初始化,设置或更改sun.net.spi.nameservice.provider 属性将不再起作用。

【讨论】:

  • 感谢您的解释。
【解决方案2】:

JVM 仅使用您在使用系统默认设置失败的查找时设置的 DNS 提供程序。您可以在文档 (http://docs.oracle.com/javase/7/docs/technotes/guides/net/properties.html) 中看到这一点,相关摘录:

默认情况下,Java 将使用系统配置的名称查找 机制

您可以指定一个逗号分隔的 IP 地址列表,这些地址指向您要使用的 DNS 服务器

在 JDK 7 中,提供程序是链式的,这意味着如果一个 查找提供者失败,请咨询列表中的下一个提供者 解析名称。

【讨论】:

  • 是的,但就我而言,我尝试解析私人记录(公共 DNS 中不存在)。所以通常 JVM 应该尝试使用下一个提供程序(我的私有 DNS),但如果我在设置属性之前调用了网络方法,我不会这样做
猜你喜欢
  • 2021-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-16
  • 2011-07-05
相关资源
最近更新 更多