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

Bob*_*Bob 4 java ipv4 ipv6

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

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

fem*_*gon 9

您可以将其设置为在可用时使用IPv4.当然,IPv6地址比IPv4地址多得多,因此它无法保证始终获得IPv4地址.

java.net.preferIPv4Stack = true
Run Code Online (Sandbox Code Playgroud)

设置为:

System.setProperty("java.net.preferIPv4Stack" , "true");
Run Code Online (Sandbox Code Playgroud)

或者作为命令行arg:

-Djava.net.preferIPv4Stack=true
Run Code Online (Sandbox Code Playgroud)

但是,IPv4地址的优先选择通常是默认行为.

如果你需要确保你永远不会得到一个IPv6地址,我认为你需要检查它java.net.InetAddress.getLocalHost().getHostAddress()是不会返回一个Inet6Address,并且如果它确实处​​理它(我想这是一个例外).

无论是当然还是更好的方法:修复代码以支持IPv6.