在使用Java InetAddress.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请求都被发送到系统的默认值而不是谷歌的DNS。还有什么办法让Java使用请求的DNS服务器?
答案 0 :(得分:1)
更一般地说,这可能是您在Java之外设置的。 JVM将自己的网络堆栈与操作系统提供的网络堆栈并行是没有意义的,因此DNS解析可能是您需要在操作系统级别配置的。
如果DNS解析是您的应用程序的核心要求,实际上您可能更有意义地自行执行解决方案,而不是通过正常的网络库(将DNS解析作为正常网络操作的副作用) 。我不怀疑你能找到一个库来帮助你创建查询请求。
答案 1 :(得分:1)
我遇到了类似的问题。clean-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的第一行告诉我。 祝你好运
答案 2 :(得分: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 becoz主机文件获取是主机名条目被解析的第一个地方