0

如果 IP 地址(IPv4、IPv6)有效,我想检查 java。

谷歌的番石榴库在我看来是一个可行的选择。它的isInetAddress(String ipString)方法适用于 IPv4 地址。但是对于 IPv6 地址,我必须使用该isIsatapAddress(Inet6Address ip)方法。

问题是我想使用argsfromvoid main(String []args)来捕获用户的输入,因为该方法需要一个 Inet6Address 对象,所以我不知道该怎么做。

4

2 回答 2

3

InetAddresses.isInetAddress(String)应该适用于 IPv4 和 IPv6 地址。

如果您还想接受类似2607:f0d0:1002:51::4/64可以用一点 indexOf 和子字符串剥离网络掩码的东西,我认为在 Guava 中还没有这样的方法:

static boolean isInetAddressOrBlock(String address) {
  int slash = address.lastIndexOf('/');
  if (slash != -1) {
    address = address.substring(0, slash);
  }
  return InetAddresses.isInetAddress(address);
}

如果您考虑使用sun.net.util.IPAddressUtil,请不要 -sun.*包是您的 JRE 的实现细节,不打算使用,并且并非在所有 JRE 上都可用。

于 2012-06-07T14:19:53.867 回答
0

我同意 InetAddresses.isInetAddress(String)。它应该完成验证 IPV4 和 IPV6 地址的工作。

但是,我想分享我对包含超过 4 个字符和前导零的 IPV6 地址的验证问题的经验。

例如,假设我得到以下地址:

1234:000002001:1234:0000:0000:C1C0:ABCD:0876

InetAddresses.isInetAddress 返回的有效地址,但另一方面,如果我考虑RFC4291中的文本表示,它看起来不是有效的 IPV6 地址

于 2013-12-09T07:50:04.330 回答