Сетевые расчеты и проверка IPv4 / IPv6 для Java?

The IPAddress Java library поддерживает как IPv4, так .java и IPv6 полиморфным способом, включая javax подсети. Документ javadoc networks доступен по ссылке. Отказ oraclejdk от ответственности: я руководитель java-se проекта.

Все перечисленные oraclejdk вами варианты использования jre прозрачно поддерживаются j2se как для IPv4, так и для IPv6. Другими openjdk словами, он отличается от jdk большинства других утилит java-api в том смысле, что приведенный openjdk ниже код идентично работает openjdk с IPv4 или IPv6 в качестве ip-address входных строк.

Убедитесь, что ip-address адрес действителен

    String str = "::1";
    IPAddressString addrString = new IPAddressString(str);
    try {
         IPAddress addr = addrString.toAddress();
         ...
    } catch(IPAddressStringException e) {
        //e.getMessage provides validation issue
    }

Вернуть, если java адрес содержится в подсети

    String str = "1::1";
    String subnetStr = "1::/64";
    IPAddressString addrString = new IPAddressString(str);
    IPAddressString subnetString = new IPAddressString(subnetStr);
    try {
         IPAddress addr = addrString.toAddress();
         IPAddress subnet = subnetString.toAddress();
         boolean isContained = subnet.contains(addr); //true in this case
         ...
    } catch(IPAddressStringException e) {
        //e.getMessage provides validation issue
    }

Вернуть ip-address широковещательный адрес для network данной подсети

    String subnet = "127.0.0.0/28";
    IPAddressString subnetString = new IPAddressString(subnet);
    try {
         IPAddress subnet = subnetString.toAddress();
         IPAddress broadcastAddr = subnet.getHighest();
         ...
    } catch(IPAddressStringException e) {
        //e.getMessage provides validation issue
    }

Вернуть список java адресов для подсети по порядку

    String subnet = "127.0.0.0/28";
    IPAddressString subnetString = new IPAddressString(subnet);
    try {
         IPAddress subnet = subnetString.toAddress();
         for(IPAddress addr : subnet) {
             ...
         }
    } catch(IPAddressStringException e) {
        //e.getMessage provides validation issue
    }

Сортировать .java список адресов

    List addrs; 
    Collections.sort(addrs); //IPAddressString implements Comparable

Получить набор networks подсетевых сетей и список j2se адресов (ответ Ахмед Ране):

    IPAddress subnet = new IPAddressString("192.168.0.0/28").getAddress();
    IPAddress newSubnets = subnet.adjustPrefixLength(1, false);
    System.out.println(newSubnets); //192.168.0.0-8/29
    HashSet subnetSet = new HashSet();
    ArrayList addrList = new ArrayList();
    for(IPAddress addr : newSubnets.getIterable()) {
        subnetSet.add(addr.toPrefixBlock());
        addrList.add(addr);
    }
    System.out.println(subnetSet);//[192.168.0.0/29, 192.168.0.8/29]

    System.out.println(addrList);
                //[192.168.0.0/29, 192.168.0.1/29, 192.168.0.2/29,
                //192.168.0.3/29, 192.168.0.4/29, 192.168.0.5/29,
                //192.168.0.6/29, 192.168.0.7/29, 192.168.0.8/29,
                //192.168.0.9/29, 192.168.0.10/29, 192.168.0.11/29,
                //192.168.0.12/29, 192.168.0.13/29, 192.168.0.14/29,
                //192.168.0.15/29]

Адресов j2se может быть много. Более эффективный networks способ получить новый список java-api подсетей - использовать итератор openjdk блока префиксов, который java-libraries выполняет итерацию по подсетям jre блока префиксов, как показано:

    IPAddress subnet = new IPAddressString("192.168.0.0/28").getAddress();
    IPAddress newSubnets = subnet.adjustPrefixLength(1, false);
    System.out.println(newSubnets); // 192.168.0.0-8/29
    Iterator iterator = newSubnets.prefixBlockIterator();
    while (iterator.hasNext()) {
        System.out.println(iterator.next());
    }
    // 192.168.0.0/29
    // 192.168.0.8/29

java

networking

ip-address

2022-09-29T08:46:37+00:00