我正在使用一个使用java.net.InetAddress.getLocalHost().getHostAddress()
来获取本地IP地址的库。但是,这始终会在我的计算机上返回IPv6地址(Gentoo Linux,JDK 1.6.0_37)。该地址还用于不支持IPv6地址的上下文中,因此失败。
是否有某种方法可以强制getHostAddress()
返回IPv4地址(例如通过参数传递给JVM)?
答案 0 :(得分:9)
您可以将其设置为在可用时使用IPv4。当然,IPv6地址比IPv4地址多得多,所以它当然不能保证始终获得IPv4地址。
java.net.preferIPv4Stack = true
设置为:
System.setProperty("java.net.preferIPv4Stack" , "true");
或者作为命令行arg:
-Djava.net.preferIPv4Stack=true
无论如何,IPv4地址的首选项通常都是默认行为。
如果您需要确保永远不会获得IPv6地址,我认为您需要检查java.net.InetAddress.getLocalHost().getHostAddress()
是否未返回Inet6Address
,如果确实如此,则需要进行处理(作为例外情况,我想)。
当然,或者更好的方法:修复代码以支持IPv6。