强制InetAddress.getHostAddress()返回IPv4地址

时间:2013-01-11 16:37:49

标签: java ipv6 ipv4

我正在使用一个使用java.net.InetAddress.getLocalHost().getHostAddress()来获取本地IP地址的库。但是,这始终会在我的计算机上返回IPv6地址(Gentoo Linux,JDK 1.6.0_37)。该地址还用于不支持IPv6地址的上下文中,因此失败。

是否有某种方法可以强制getHostAddress()返回IPv4地址(例如通过参数传递给JVM)?

1 个答案:

答案 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。