3

在使用 JavaInetAddress.getByName()将主机解析为 IP 时,我想使用 Google 的 DNS 而不是本地系统的默认值。基于其他 stackoverflow 问题以及http://docs.oracle.com/javase/6/docs/technotes/guides/net/properties.html提供的信息,我使用以下内容设置适当的属性:

System.setProperty("sun.net.spi.nameservice.nameservers", "8.8.8.8");
System.setProperty("sun.net.spi.nameservice.provider.1", "dns,sun");

稍后在程序中调用System.getProperty("sun.net.spi.nameservice.nameservers")确认该属性设置为 8.8.8.8 - 但是,网络流量清楚地显示所有 DNS 请求都发送到系统的默认值,而不是 Google 的 DNS。为了让 Java 使用请求的 DNS 服务器,还应该做些什么?

4

3 回答 3

1

更一般地说,这是您可能必须在 Java 之外设置的内容。JVM 拥有自己的网络堆栈与操作系统提供的网络堆栈并行是没有意义的,因此 DNS 解析可能是您需要在操作系统级别配置的东西。

如果 DNS 解析是您的应用程序的核心要求,那么您自己进行解析而不是通过正常的网络库(将 DNS 解析作为正常网络操作的副作用)实际上可能更有意义。我不怀疑您可以找到一个库来帮助您创建查找请求。

于 2012-08-14T21:04:23.153 回答
1

我面临着类似的问题。干净的 dns-server-in-jvm

我认为您的问题不是因为设置 DNS 属性没有效果,而是因为您将这些参数设置在代码的后期,或者可能是在第一次网络连接之后。

试着放

System.setProperty("sun.net.spi.nameservice.nameservers", "8.8.8.8");
System.setProperty("sun.net.spi.nameservice.provider.1", "dns,sun");

在你的 Main 的第一行告诉我。祝你好运

于 2013-07-02T13:48:03.667 回答
0

尝试在 \Windows\System32\drivers 下的主机文件中设置 sun.net.spi.nameservice.nameservers 8.8.8.8。看起来您的主机文件中已经有 sun.net.spi.nameservice.nameservers 指向某个条目。所以尝试在主机文件的最后设置尝试设置 sun.net.spi.nameservice.nameservers 8.8.8.8 因为主机文件获取是解析主机名条目的第一个位置

于 2012-08-14T17:26:56.767 回答