5

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

有没有办法强制getHostAddress()返回一个 IPv4 地址(例如通过参数给 JVM)?

4

1 回答 1

9

您可以将其设置为在可用时使用 IPv4。当然,IPv6 地址比 IPv4 地址多很多,因此它当然不能保证总是获得 IPv4 地址。

java.net.preferIPv4Stack = true

要么设置:

System.setProperty("java.net.preferIPv4Stack" , "true");

或作为命令行参数:

-Djava.net.preferIPv4Stack=true

不过,首选 IPv4 地址通常是默认行为。

如果您需要确保永远不会获得 IPv6 地址,我认为您需要检查它java.net.InetAddress.getLocalHost().getHostAddress()是否不返回 an Inet6Address,并在它返回时处理它(我想是个例外)。

或者,当然,更好的方法:修复你的代码以支持 IPv6。

于 2013-01-11T16:57:04.573 回答