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

6
我正在使用一个库,它使用java.net.InetAddress.getLocalHost().getHostAddress()来获取我的本地IP地址。然而,在我的计算机上(Gentoo Linux,JDK 1.6.0_37),这总是返回一个IPv6地址。该地址在不支持IPv6地址的上下文中进一步使用,因此失败了。
是否有办法强制getHostAddress()返回IPv4地址(例如通过JVM参数)?

获取Java中的IP地址可能会很有用。 - mtk
谢谢,但我想避免更改我的源代码,因为调用在一个库中,我不想更改它。 - Bob
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()是否返回Inet6Address,如果是(我猜测),就要将其处理为异常情况。

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


如果返回的地址是IPv6,如何处理异常情况的测试将是什么? - Hosni

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接