Хорошая библиотека Java для сетевой математики

Я ищу библиотеку Java, которая ориентирована на сетевую математику и уже тестировалась. Ничего особенного, просто что-то, чтобы держать ips и подсети, и делать такие вещи, как печать маски подсети или вычисление того, находится ли IP в данной подсети.

Должен ли я катиться самостоятельно или у вас уже есть надежная библиотека?

Ответы

Ответ 1

Мы сами разработали арифметическую библиотеку Java IPv4. См. Здесь: http://tufar.com/ipcalculator/ Он находится под лицензией BSD.

Ответ 2

org.apache.lenya.ac.IPRange, похоже, имеет эти функции.

Проект Apache Lenya - это система управления контентом с открытым исходным кодом. Он использует лицензию Apache, поэтому вы можете повторно использовать только тот код, который вам нужен. (Но, как всегда, прочитайте license самостоятельно, не доверяйте юридическим советам какого-либо парня в Интернете!: -)

Ответ 3

библиотека Java IPAddress с открытым исходным кодом может выполнять манипуляции с IP-адресами, такие как преобразование в/из ipv4/ipv6 и проверку подсети. Отказ от ответственности: я руководитель проекта.

Он обрабатывает различные сетевые математические операции, такие как маскирование, побитовое или, задание длины префикса, адрес коммутатора в префиксный блок, повторение через подсеть, проверка сдерживания, замена сегментов адреса, реверсирование адресов, вычисление пересечения подсети, вычитание одной подсети из другой и др.

Вот пример кода для тестирования, если адрес ipv6 находится в данной подсети:

    String ipv6 = "2001:db8:57AB:0000:0000:0000:0000:0001";
    String ipv6subnet = "2001:db8::/32";
    String ipv4 = "1.2.3.4";
    try {
        IPAddressString ipv6addrstr = new IPAddressString(ipv6);
        IPAddressString ipv6addrsubnetstr = new IPAddressString(ipv6subnet);
        IPAddressString ipv4addrstr = new IPAddressString(ipv4);

        IPAddress ipv6addr = ipv6addrstr.toAddress();
        IPAddress ipv6addrsubnet = ipv6addrsubnetstr.toAddress();
        IPAddress ipv4mappedaddr = ipv4addrstr.toAddress().toIPv6();

        System.out.println(ipv6addrsubnet + " contains " + ipv6addr + ": " + ipv6addrsubnet.contains(ipv6addr)); //
        System.out.println(ipv6addrsubnet + " contains " + ipv4mappedaddr + ": " + ipv6addrsubnet.contains(ipv4mappedaddr)); //

    } catch(AddressStringException e) {
        //e.getMessage has validation error
    }

выход:

2001:db8::/32 contains 2001:db8:57ab::1 is true
2001:db8::/32 contains ::ffff:102:304 is false