
Calculateur de sous-réseau IPv6
Calculer le préfixe réseau, la plage et le nombre d’adresses d’une adresse IPv6 et d’un préfixe CIDR.
Les bornes indiquent l’étendue mathématique du préfixe ; elles ne signifient pas que toutes les adresses sont attribuables. IPv6 ne possède pas d’adresse de diffusion.
Méthode et hypothèses
Version de méthode 1.0.0 · Mise à jour
Calculer un préfixe IPv6
Formule: Adresse réseau = adresse IPv6 ET masque de préfixe ; nombre d’adresses = 2^(128 − préfixe).
Le résultat donne le préfixe réseau, les deux bornes mathématiques et le nombre total d’adresses. IPv6 n’utilise pas d’adresse de diffusion ; ces bornes ne préjugent pas des règles d’attribution locales.
- address
- Adresse IPv6
- prefix
- Longueur du préfixe CIDR
Adresses IPv6 hexadécimales avec compression :: et préfixe CIDR de /0 à /128. Les suffixes de zone et les formes IPv4 intégrées ne sont pas acceptés.
Reproduire le calcul en code
Ces exemples utilisent les mêmes entrées et le même calcul de base que cet outil. Adaptez la validation et le formatage à votre application.
JavaScript
// npm install ipaddr.js
import ipaddr from 'ipaddr.js';
const [address, prefix] = ipaddr.parseCIDR('2001:db8:1234::1/64');
const bytes = address.toByteArray();
for (let i = 0; i < bytes.length; i++) {
const bits = Math.max(0, Math.min(8, prefix - i * 8));
bytes[i] &= (0xFF << (8 - bits)) & 0xFF;
}
console.log(ipaddr.fromByteArray(bytes).toString()); // 2001:db8:1234::TypeScript
// npm install ipaddr.js
import ipaddr from 'ipaddr.js';
const [address, prefix] = ipaddr.parseCIDR('2001:db8:1234::1/64');
const bytes = address.toByteArray();
for (let i = 0; i < bytes.length; i++) {
const bits = Math.max(0, Math.min(8, prefix - i * 8));
bytes[i] = bytes[i]! & ((0xFF << (8 - bits)) & 0xFF);
}
console.log(ipaddr.fromByteArray(bytes).toString()); // 2001:db8:1234::Python
from ipaddress import ip_network
network = ip_network('2001:db8:1234::1/64', strict=False)
print(network.network_address) # 2001:db8:1234::Java
import java.math.BigInteger;
import java.net.InetAddress;
var address = InetAddress.getByName("2001:db8:1234::1").getAddress();
var value = new BigInteger(1, address);
var mask = BigInteger.ONE.shiftLeft(128).subtract(BigInteger.ONE.shiftLeft(64));
var network = value.and(mask).toByteArray();
var sixteenBytes = new byte[16];
System.arraycopy(network, Math.max(0, network.length - 16), sixteenBytes,
Math.max(0, 16 - network.length), Math.min(16, network.length));
System.out.println(InetAddress.getByAddress(sixteenBytes).getHostAddress()); // 2001:db8:1234:0:0:0:0:0C#
var bytes = System.Net.IPAddress.Parse("2001:db8:1234::1").GetAddressBytes();
for (var i = 0; i < bytes.Length; i++) {
var bits = Math.Max(0, Math.Min(8, 64 - i * 8));
bytes[i] &= (byte)((0xFF << (8 - bits)) & 0xFF);
}
Console.WriteLine(new System.Net.IPAddress(bytes)); // 2001:db8:1234::Autres langages
C
#include <arpa/inet.h>
#include <stdio.h>
struct in6_addr ip; char out[INET6_ADDRSTRLEN];
inet_pton(AF_INET6, "2001:db8:1234::1", &ip);
for (int i = 8; i < 16; i++) ip.s6_addr[i] = 0; // /64
inet_ntop(AF_INET6, &ip, out, sizeof out);
puts(out); // 2001:db8:1234::C++
#include <arpa/inet.h>
#include <iostream>
struct in6_addr ip{}; char out[INET6_ADDRSTRLEN];
inet_pton(AF_INET6, "2001:db8:1234::1", &ip);
for (int i = 8; i < 16; ++i) ip.s6_addr[i] = 0; // /64
inet_ntop(AF_INET6, &ip, out, sizeof out); std::cout << out; // 2001:db8:1234::PHP
$bytes = inet_pton('2001:db8:1234::1');
$bytes = substr($bytes, 0, 8) . str_repeat(chr(0), 8); // /64
echo inet_ntop($bytes); // 2001:db8:1234::PowerShell
$bytes = [Net.IPAddress]::Parse('2001:db8:1234::1').GetAddressBytes()
for ($i = 8; $i -lt 16; $i++) { $bytes[$i] = 0 } # /64
[Net.IPAddress]::new($bytes) # 2001:db8:1234::