一个奇怪的UnknownHostException

fuy*_*001 4 java dns ipv6

在一个Web项目中。
我看到日志:

hadoop.hbase.zookeeper.ZKConfig - java.net.UnknownHostException: example.com 
at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method)
at java.net.InetAddress$1.lookupAllHostAddr(InetAddress.java:850)
at java.net.InetAddress.getAddressFromNameService(InetAddress.java:1201)
at java.net.InetAddress.getAllByName0(InetAddress.java:1154)
at java.net.InetAddress.getAllByName(InetAddress.java:1084)
at java.net.InetAddress.getAllByName(InetAddress.java:1020)
at java.net.InetAddress.getByName(InetAddress.java:970)
Run Code Online (Sandbox Code Playgroud)

但是当我ping example.com时,没关系,我也成功telnet example.com 2181!我发现了类似的问题, 所以我在服务器Java DomainResolutionTest example.com中 运行DomainResolutionTest,
但是没关系!

环境:

java -version
Run Code Online (Sandbox Code Playgroud)

Java版本“ 1.6.0_25”
Java™SE运行时环境(内部版本1.6.0_25-b06)
Java HotSpot(TM)64位服务器VM(内部版本20.0-b11,混合模式)

os:Red Hat Enterprise Linux Server release 5.7

我很好奇为什么是Inet6AddressImpl,我想可能是Inet4AddressImpl

怎么解决呢?
是什么原因?

小智 7

如果是双栈(ipv6 + v4)Java更喜欢ipv6。

如果您的 ipv6 以某种方式配置错误,您可以强制它更喜欢 ipv4。

设置系统属性:-Djava.net.preferIPv4Stack=true

来源:http ://docs.oracle.com/javase/6/docs/technotes/guides/net/ipv6_guide/


小智 6

我也有同样的例外,并通过在/ etc / hosts中手动为'localhost'条目设置了我的主机名来解决了这两个问题。

127.0.0.1       localhost DL006285-linux

# special IPv6 addresses
::1             localhost ipv6-localhost ipv6-loopback DL006285-linux
Run Code Online (Sandbox Code Playgroud)