Java-код / ​​библиотека для объединения непрерывных блоков CIDR

Есть ли какие-либо 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

0 ответов

Для этого есть библиотека на Java. В библиотеке Java IPAddress с открытым исходным кодом есть методы для объединения адресов и подсетей в подсети префиксных блоков. Отказ от ответственности: я являюсь руководителем проекта библиотеки IPAddress.

Следующий метод merge показывает код, опирающийся на метод 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]
Другие вопросы по тегам