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.

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.

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:0
C#
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::

Comprendre les protocoles IP