0

IPアドレス(IPv4、IPv6)が有効かどうかをJavaで確認したいのですが。

Googleのグアバライブラリは、実行可能なオプションのように私には見えます。そのisInetAddress(String ipString)方法は、IPv4アドレスに対しては問題なく機能します。ただし、IPv6アドレスの場合は、このisIsatapAddress(Inet6Address ip)方法を使用する必要があります。

問題は、argsfromを使用しvoid main(String []args)てユーザーの入力をキャプチャしたいことです。このメソッドには、Inet6Addressオブジェクトが必要なため、その方法がわかりません。

4

2 に答える 2

3

InetAddresses.isInetAddress(String)IPv4アドレスとIPv6アドレスの両方で機能するはずです。

小さなindexOfとsubstringを使用してネットマスクを取り除くことができるようなものも受け入れたい場合は2607:f0d0:1002:51::4/64、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 に答える