Programme java pour convertir une adresse CIDR en masque de sous-réseau et en adresse réseau

Étant donné une adresse CIDR, par exemple 192.168.10.0/24

Comment déterminer la taille du masque ? (24)
Comment déterminer l’adresse du masque ? (255.255.255.0)
Comment déterminer l’adresse du réseau ? (192.168.10.0)

Il est décrit dans le document apache utils.

Voir cette URL : SubnetUtils (Apache Commons Net 3.9.0 API)

String subnet = "192.168.0.3/31";
SubnetUtils utils = new SubnetUtils(subnet);

utils.getInfo().isInRange(address)

Note : Pour une utilisation avec des sous-réseaux /32 CIDR, par exemple, il faut ajouter la déclaration suivante :

utils.setInclusiveHostCount(true);

Voici comment procéder en Java:

String[] parts = addr.split("/");
String ip = parts[0];
int prefix;
if (parts.length < 2) {
      prefix = 0;
} else {
      prefix = Integer.parseInt(parts[1]);
}
int mask = 0xffffffff << (32 - prefix);
System.out.println("Prefix=" + prefix);
System.out.println("Address=" + ip);

int value = mask;
byte[] bytes = new byte[]{ 
   (byte)(value >>> 24), (byte)(value >> 16 & 0xff), (byte)(value >> 8 & 0xff), (byte)(value & 0xff) 
};

InetAddress netAddr = InetAddress.getByAddress(bytes);
System.out.println("Mask=" + netAddr.getHostAddress());

La bibliothèque Java IPAddress prend en charge à la fois IPv4 et IPv6 de manière polymorphe, y compris les sous-réseaux.

Tous les cas d’utilisation que vous avez énumérés sont pris en charge de manière transparente pour IPv4 et IPv6.

String str = "192.168.100.0/24";
IPAddressString addrString = new IPAddressString(str);
try {
     IPAddress addr = addrString.toAddress();
     Integer prefix = addr.getNetworkPrefixLength(); //24
     IPAddress mask = addr.getNetwork().getNetworkMask(prefix, false);//255.255.255.0
     IPAddress networkAddr = addr.mask(mask);  //192.168.100.0
     IPAddress networkAddrOtherWay = addr.getLower().removePrefixLength(); //192.168.100.0
     ...
} catch(AddressStringException e) {
    //e.getMessage fournit des informations sur la validation
}

Pour récupérer l’ensemble des adresses IP, la classe Java Apache SubnetUtils fournit les méthodes suivantes :

String[] addresses = utils.getInfo().getAllAddresses();

Pour télécharger le fichier jar contenant la classe, rendez-vous à l’adresse suivante: http://repo1.maven.org/maven2/commons-net/commons-net/3.0.1/commons-net-3.0.1.jar