2013-01-11 52 views
3

我使用,使用java.net.InetAddress.getLocalHost().getHostAddress()让我的本地IP地址库。但是,这总是会返回我的计算机上的IPv6地址(Gentoo Linux,JDK 1.6.0_37)。该地址进一步用于不支持IPv6地址的情况下,从而失败。力InetAddress.getHostAddress()返回IPv4地址

是否有某种方式来强制getHostAddress()(例如,通过一个参数来JVM)返回一个IPv4地址?

+0

[获取Java中您的IP地址(http://stackoverflow.com/a/9482369/1135954)可能是有用的。 – mtk

+0

谢谢,但我想避免更改我的源代码,因为调用是我不希望改变库中。 – Bob

回答

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。

+0

如果返回的地址是ipv6,测试如何处理异常? – Hosni