É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
)
É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