给出的字符串无疑是100%的有效IP地址。

但是,将其作为参数接收的方法不会接收告诉它是IPv4还是IPv6的附加参数。

我已经看到一种确定是IPv4还是IPv6的方法:

InetAddress address = InetAddress.getByName(ip);
if (address instanceof Inet6Address) {
    // It's ipv6
} else if (address instanceof Inet4Address) {
    // It's ipv4
}


但是我正在寻找一种更快的方法(请注意,上面也应该包含try / catch)。

我可以摆脱一些简单的事情吗:

if (totallyValidIp.contains(":") {
        // It's ipv6
}
else {
        // It's ipv4
}


还是有一个我不知道的地方? (例如,不包含任何“:”的有效IPv6)。

注意:这种“优化”指望我知道IP字符串是已经检查和验证的IP地址这一事实。

最佳答案

IPv6地址字符串将包含两个到七个冒号,不一定是连续的。但是,如果您已经在其他地方验证了地址,那么检查冒号的存在就足够了。

但是,如果您已经有一个InetAddress对象,只需坚持使用instanceof。来回转换为字符串听起来像很多不必要的工作。

关于java - 有效IP字符串中的“:”是否足以确定其为IPv6地址?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48787357/

10-14 09:57