使用java迭代CIDR中的所有IP地址

时间:2015-09-16 09:53:05

标签: java arrays algorithm design-patterns

我想知道是否有任何方法可以爆炸CIDR格式的IP。除了爆炸这个代码应该考虑'排除'功能也。

确切地说,我想要的东西需要172.21.3.128/30(包含清单:172.21.3.128/30)并返回

  • 172.21.3.128
  • 172.21.3.129
  • 172.21.3.130
  • 172.21.3.131

如果它有排除列表为' 172.21.3.130'(包含列表:172.21.3.128 / 30&排除列表:172.21.3.130)那么它应该返回

  • 172.21.3.128
  • 172.21.3.129
  • 172.21.3.131

目前我爆炸包含列表&保持设置和爆炸排除列表&保持在set.And采取两个区别。这种方法的问题是我必须将所有爆炸的IP保留在内存中,如果范围非常大,可能会产生问题(outofmemoryerror)。

1 个答案:

答案 0 :(得分:2)

至于包含列表,您可以使用SubnetUtils类的Apache Commons Net来获取所有地址,例如:

String subnet = "192.168.0.0/24";
SubnetUtils utils = new SubnetUtils(subnet);
String[] addresses = utils.getInfo().getAllAddresses();

但看起来,在这种情况下你需要自己排除,因为在这样的工具中它并没有被天真地支持。因此,您可以简单地对所有地址进行收集,并从中删除所有应排除的地址。