用于合并连续CIDR块的Java代码/库

时间:2017-10-05 11:41:14

标签: java cidr netmask

是否有任何java api或库可用于合并多个连续的cidr块。

例如:

209.152.214.112/30
209.152.214.116/31
209.152.214.118/31

可以合并到209.152.214.112/29。 但是下面的cidr不能合并,因为它们不是连续的。

209.152.214.112/30
209.152.214.116/32
209.152.214.118/31

1 个答案:

答案 0 :(得分:0)

有一个可用的Java库。 open-source IPAddress Java library具有将地址和子网合并到前缀块子网中的方法。免责声明:我是IPAddress库的项目经理。

以下方法“合并”显示了代码,这些代码依赖于库中的mergeToPrefixBlocks方法:

static IPAddress[] merge(String strs[]) {
    List<String> strList = Arrays.asList(strs);
    // convert first
    IPAddress first = new IPAddressString(strList.get(0)).getAddress(); 
    // convert remaining
    IPAddress others[] = strList.subList(1, strList.size()).stream().map(str -> new IPAddressString(str).getAddress()).toArray(IPAddress[]::new);  

    // merge first with remaining
    return first.mergeToPrefixBlocks(others);
}

该方法可以通过您的示例进行演示:

    System.out.println("blocks are " + Arrays.asList(merge(new String[] {"209.152.214.112/30", "209.152.214.116/31", "209.152.214.118/31"})));
    System.out.println("blocks are " + Arrays.asList(merge(new String[] {"209.152.214.112/30", "209.152.214.116/32", "209.152.214.118/31"})));

输出为:

blocks are [209.152.214.112/29]
blocks are [209.152.214.116/32, 209.152.214.118/31, 209.152.214.112/30]