Ответ 1
Мы сами разработали арифметическую библиотеку Java IPv4. См. Здесь: http://tufar.com/ipcalculator/ Он находится под лицензией BSD.
Я ищу библиотеку Java, которая ориентирована на сетевую математику и уже тестировалась. Ничего особенного, просто что-то, чтобы держать ips и подсети, и делать такие вещи, как печать маски подсети или вычисление того, находится ли IP в данной подсети.
Должен ли я катиться самостоятельно или у вас уже есть надежная библиотека?
Мы сами разработали арифметическую библиотеку Java IPv4. См. Здесь: http://tufar.com/ipcalculator/ Он находится под лицензией BSD.
org.apache.lenya.ac.IPRange, похоже, имеет эти функции.
Проект Apache Lenya - это система управления контентом с открытым исходным кодом. Он использует лицензию Apache, поэтому вы можете повторно использовать только тот код, который вам нужен. (Но, как всегда, прочитайте license самостоятельно, не доверяйте юридическим советам какого-либо парня в Интернете!: -)
библиотека 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