提问者:小点点

设置DNS属性没有任何效果


在使用Java的InetAddres. 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服务器?


共3个答案

匿名用户

更一般地说,这可能是您必须在Java之外设置的。JVM拥有自己的网络堆栈与OS提供的网络堆栈并行是没有意义的,因此DNS分辨率可能是您需要在OS级别配置的。

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

匿名用户

我面临着类似的问题. cle-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");

在主干道的第一排告诉我祝你好运

匿名用户

尝试设置sun.net. spi.nameservice.nameservers8.8.8.8在\Windows\System32\drivers下的主机文件中。看起来已经在您的主机文件中sun.net.spi.nameservice.nameservers指向某个条目。因此尝试设置尝试设置sun.net.spi.nameservice.nameservers8.8.8.8在主机文件的最后,因为host file get是解析主机名条目的第一个位置