IP アドレスの範囲を格納するために推奨されるデータ型は?
たとえば、
"IP1":["12.21.31.0/24"],
"IP2":["13.96.210.122/28","12.33.116.17/21"]
データは JSON 形式です。この JSON 情報を解析する Java オブジェクトがあります。Javaクラスでどのデータ型を使用すればよいかわかりません。提案してください。
IP アドレスの範囲を格納するために推奨されるデータ型は?
たとえば、
"IP1":["12.21.31.0/24"],
"IP2":["13.96.210.122/28","12.33.116.17/21"]
データは JSON 形式です。この JSON 情報を解析する Java オブジェクトがあります。Javaクラスでどのデータ型を使用すればよいかわかりません。提案してください。
InetAddress クラスは、理想的なタイプ ストアの IP アドレスです。それはあなたがここで求めた以上のものです。ただし、名前/アドレスから IP を取得する場合や、その逆の場合に役立ちます。
INetAddress でサポートされていない CIDR マスクを使用しているため、他のタイプが必要になります
Apache SubnetUtilsを使用したコード サンプル
String subnet = "12.21.31.0/24";
SubnetUtils utils = new SubnetUtils(subnet);
utils.getInfo().isInRange(address);
CIDRUtilsを使用したコード サンプル
CIDRUtils cidrUtils = new CIDRUtils("10.21.31.0/24");
String networkAddress = cidrUtils.getNetworkAddress();
String broadcastAddress = cidrUtils.getBroadcastAddress();
IP アドレスは、32 ビットの整数 (IPv6 の場合は 128 ビット) として表すことができます。したがって、範囲を整数の範囲として単純に扱うことができます。次に、クエリの方法に応じて、 TreeSet、ビット マスク、またはその他のデータ構造を検討できます。別の方法として、 Comparableを実装する整数または IP アドレス ラッパー クラスのいずれかのRangeSetが適切なソリューションになる可能性があります。