用于存储Java中IP地址范围的数据类型

时间:2013-07-18 22:18:26

标签: java

建议使用哪种数据类型来存储IP地址范围?

例如,

"IP1":["12.21.31.0/24"],
"IP2":["13.96.210.122/28","12.33.116.17/21"]

数据采用JSON格式。我有一个解析此JSON信息的java对象。我只是不确定在Java类中继续使用什么数据类型。请建议。

2 个答案:

答案 0 :(得分:2)

InetAddress class将是理想的类型存储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();

答案 1 :(得分:0)

IP地址可以表示为32位整数(IPv6为128位)。因此,您可以简单地将范围视为整数范围。然后,您可以考虑TreeSet,位掩码或其他一些数据结构,具体取决于您的查询方式。或者,您编写的实现RangeSet的整数或IP地址包装器类的Comparable可能是一个很好的解决方案。