Aller au contenu
Réseaux medium

ipcalc : calculateur d'adresses IP et sous-réseaux

15 min de lecture

Tu dois découper un /24 en plusieurs sous-réseaux pour ton projet. Combien d’hôtes dans un /27 ? Quelle est l’adresse de broadcast du 10.0.0.64/26 ? Ces calculs reviennent sans cesse en administration réseau — et les erreurs coûtent cher : conflit d’IP, machines isolées, routage cassé.

ipcalc répond à ces questions en une commande. Donne-lui une adresse IP et un masque, il te retourne instantanément : plage d’hôtes utilisables, broadcast, wildcard Cisco, et même le découpage optimal en sous-réseaux.

Le subnetting (découpage en sous-réseaux) est une compétence fondamentale en réseau. Mais les calculs manuels sont fastidieux et sources d’erreurs :

ProblèmeConséquenceSolution ipcalc
Erreur de masqueMachines qui ne communiquent pasValidation instantanée
Mauvais broadcastPaquets perdusCalcul automatique
Sous-réseau trop petitPas assez d’IPs pour les hôtesCalcul du nombre d’hôtes
VLSM mal planifiéGaspillage d’adressesOption `—split`

ipcalc existe en deux versions :

VersionLangageMainteneurParticularités
0.51 (ce guide)Perljodies.deAffichage binaire pédagogique, `—split`, `—range`
1.0.3CGitLab/nmavIPv6 complet, JSON, géolocalisation

La version Perl (0.51) est celle installée par défaut sur la plupart des distributions. Elle est parfaite pour l’apprentissage grâce à son affichage binaire.

Fenêtre de terminal
sudo apt update && sudo apt install ipcalc
Fenêtre de terminal
ipcalc --version

Sortie attendue :

IP Calculator 0.51

Commençons par analyser un réseau simple :

Fenêtre de terminal
ipcalc 192.168.1.100/24 -b

Sortie :

Address: 192.168.1.100
Netmask: 255.255.255.0 = 24
Wildcard: 0.0.0.255
=>
Network: 192.168.1.0/24
HostMin: 192.168.1.1
HostMax: 192.168.1.254
Broadcast: 192.168.1.255
Hosts/Net: 254 Class C, Private Internet
ChampValeurSignification
Address192.168.1.100L’IP analysée
Netmask255.255.255.0 = 24Masque en décimal et notation CIDR
Wildcard0.0.0.255Masque inverse (pour ACL Cisco)
Network192.168.1.0/24Adresse du réseau (tous les bits hôtes à 0)
HostMin192.168.1.1Première IP utilisable
HostMax192.168.1.254Dernière IP utilisable
Broadcast192.168.1.255Adresse de diffusion (tous les bits hôtes à 1)
Hosts/Net254Nombre d’IPs assignables (2^8 - 2)

Sans l’option `-b`, ipcalc affiche la représentation binaire :

Fenêtre de terminal
ipcalc 192.168.1.100/24
Address: 192.168.1.100 11000000.10101000.00000001. 01100100
Netmask: 255.255.255.0 = 24 11111111.11111111.11111111. 00000000
Wildcard: 0.0.0.255 00000000.00000000.00000000. 11111111
=>
Network: 192.168.1.0/24 11000000.10101000.00000001. 00000000
HostMin: 192.168.1.1 11000000.10101000.00000001. 00000001
HostMax: 192.168.1.254 11000000.10101000.00000001. 11111110
Broadcast: 192.168.1.255 11000000.10101000.00000001. 11111111
Hosts/Net: 254 Class C, Private Internet

L’espace dans la représentation binaire marque la frontière entre :

  • Bits réseau (à gauche) : fixes pour tout le sous-réseau
  • Bits hôtes (à droite) : varient pour chaque machine

ipcalc accepte plusieurs notations pour le masque :

Fenêtre de terminal
# Notation CIDR (recommandée)
ipcalc 10.0.0.1/24
# Masque décimal
ipcalc 10.0.0.1 255.255.255.0
# Masque inverse (wildcard Cisco)
ipcalc 10.0.0.1 0.0.0.255
OptionDescription
`-b`, `—nobinary`Supprime l’affichage binaire
`-n`, `—nocolor`Désactive les couleurs ANSI
`-c`, `—color`Force les couleurs
`-s`, `—split N1 N2…`Découpe en sous-réseaux de N hôtes
`-r`, `—range`Décompose une plage en blocs CIDR
`—class`Affiche uniquement le préfixe CIDR
`-h`, `—html`Sortie HTML (expérimental)
`-v`, `—version`Affiche la version

C’est la fonctionnalité killer de ipcalc. L’option `—split` calcule automatiquement le découpage optimal.

Tu disposes du réseau `10.0.0.0/24` (254 hôtes) et dois créer 3 sous-réseaux :

  • IT : 50 postes
  • Compta : 30 postes
  • Direction : 20 postes
Fenêtre de terminal
ipcalc --split 50 30 20 10.0.0.0/24 -b

Sortie :

Address: 10.0.0.0
Netmask: 255.255.255.0 = 24
...
Hosts/Net: 254 Class A, Private Internet
1. Requested size: 50 hosts
Netmask: 255.255.255.192 = 26
Network: 10.0.0.0/26
HostMin: 10.0.0.1
HostMax: 10.0.0.62
Broadcast: 10.0.0.63
Hosts/Net: 62 Class A, Private Internet
2. Requested size: 30 hosts
Netmask: 255.255.255.224 = 27
Network: 10.0.0.64/27
HostMin: 10.0.0.65
HostMax: 10.0.0.94
Broadcast: 10.0.0.95
Hosts/Net: 30 Class A, Private Internet
3. Requested size: 20 hosts
Netmask: 255.255.255.224 = 27
Network: 10.0.0.96/27
HostMin: 10.0.0.97
HostMax: 10.0.0.126
Broadcast: 10.0.0.127
Hosts/Net: 30 Class A, Private Internet
Needed size: 128 addresses.
Used network: 10.0.0.0/25
Unused:
10.0.0.128/25
DépartementDemandéObtenuRéseauPlage utilisable
IT506210.0.0.0/26.1 → .62
Compta303010.0.0.64/27.65 → .94
Direction203010.0.0.96/27.97 → .126
Réserve-12610.0.0.128/25.129 → .254

L’option `—range` fait l’inverse : elle trouve le ou les blocs CIDR qui couvrent une plage.

Fenêtre de terminal
ipcalc --range 172.16.0.0-172.16.0.127

Sortie :

deaggregate 172.16.0.0 - 172.16.0.127
172.16.0.0/25

Tu as plusieurs réseaux contigus et veux les annoncer en une seule route :

Fenêtre de terminal
ipcalc --range 192.168.0.0-192.168.3.255
deaggregate 192.168.0.0 - 192.168.3.255
192.168.0.0/22

Résultat : les 4 réseaux /24 (192.168.0.0 à 192.168.3.0) s’agrègent en un seul /22.

ipcalc s’intègre facilement dans les scripts d’automatisation.

Fenêtre de terminal
# Extraire l'adresse de broadcast
ipcalc 192.168.1.0/24 -b | grep Broadcast | awk '{print $2}'
# 192.168.1.255
# Extraire le nombre d'hôtes
ipcalc 10.0.0.0/22 -b | grep Hosts | awk '{print $2}'
# 1022
#!/bin/bash
# validate-subnet.sh : vérifie si une IP appartient à un sous-réseau
IP=\$1
SUBNET=\$2
if [[ -z "\$IP" || -z "\$SUBNET" ]]; then
echo "Usage: \$0 <IP> <SUBNET>"
exit 1
fi
# Récupérer la plage
MIN=\$(ipcalc "\$SUBNET" -b | grep HostMin | awk '{print \$2}')
MAX=\$(ipcalc "\$SUBNET" -b | grep HostMax | awk '{print \$2}')
echo "Sous-réseau: \$SUBNET"
echo "Plage valide: \$MIN - \$MAX"
echo "IP testée: \$IP"
#!/bin/bash
# generate-netplan.sh : génère une config Netplan depuis ipcalc
CIDR=\$1
GATEWAY=\$2
NETWORK=\$(ipcalc "\$CIDR" -b | grep Network | awk '{print \$2}')
NETMASK=\$(ipcalc "\$CIDR" -b | grep Netmask | awk '{print \$4}')
cat << EOF
network:
version: 2
ethernets:
eth0:
addresses:
- \$CIDR
routes:
- to: default
via: \$GATEWAY
EOF

Ces exercices correspondent aux questions typiques CCNA et Network+.

Question : À quel réseau appartient l’hôte 172.16.45.200/20 ?

Fenêtre de terminal
ipcalc 172.16.45.200/20 -b
Network: 172.16.32.0/20
HostMin: 172.16.32.1
HostMax: 172.16.47.254
Broadcast: 172.16.47.255
Hosts/Net: 4094

Réponse : Le réseau est 172.16.32.0/20 (pas 172.16.45.0 !).

Question : Combien d’adresses utilisables dans un /19 ?

Fenêtre de terminal
ipcalc 10.0.0.0/19 -b | grep Hosts
Hosts/Net: 8190

Réponse : 8190 hôtes (2^13 - 2).

Question : Quel masque pour 100 hôtes minimum ?

Méthode : tester les masques jusqu’à trouver le bon.

Fenêtre de terminal
# /25 = 126 hôtes ✓
ipcalc 10.0.0.0/25 -b | grep Hosts
# Hosts/Net: 126
# /26 = 62 hôtes ✗ (insuffisant)
ipcalc 10.0.0.0/26 -b | grep Hosts
# Hosts/Net: 62

Réponse : /25 (255.255.255.128) pour 126 hôtes utilisables.

Question : Découpe 192.168.10.0/24 en :

  • 1 réseau de 60 hôtes
  • 2 réseaux de 25 hôtes
  • 4 réseaux de 10 hôtes
Fenêtre de terminal
ipcalc --split 60 25 25 10 10 10 10 192.168.10.0/24 -b

Vérifie que tous les sous-réseaux tiennent dans le /24 original.

CIDRMasqueHôtesUsage typique
/32255.255.255.2551Hôte unique (loopback)
/31255.255.255.2542*Liens point-à-point (RFC 3021)
/30255.255.255.2522Liens routeur-routeur
/29255.255.255.2486Petit segment
/28255.255.255.24014Petit bureau
/27255.255.255.22430Département
/26255.255.255.19262Étage
/25255.255.255.128126Grand bureau
/24255.255.255.0254Réseau standard
/23255.255.254.05102 × /24
/22255.255.252.010224 × /24
/16255.255.0.065534Classe B
/8255.0.0.016M+Classe A

*Le /31 est un cas spécial sans broadcast (RFC 3021).

SymptômeCause probableSolution
”Invalid address”Format incorrectUtiliser notation CIDR : `10.0.0.1/24`
Mauvais réseauIP hors plageVérifier que l’IP est dans le sous-réseau
Résultat tronquéTerminal trop étroitÉlargir le terminal ou utiliser `-b`
Pas de couleursVariable TERMForcer avec `-c` ou vérifier `$TERM`

Si tu obtiens des résultats différents de ce guide, vérifie ta version :

Fenêtre de terminal
ipcalc --version
  • Version 0.51 (Perl) : ce guide
  • Version 1.0.x (C) : syntaxe légèrement différente, plus d’options
  • ipcalc calcule instantanément masques, plages et broadcast
  • L’option `-b` simplifie la sortie en supprimant le binaire
  • `—split` découpe un réseau en sous-réseaux de tailles spécifiées
  • `—range` trouve les blocs CIDR pour une plage d’adresses
  • Le nombre d’hôtes = 2^(32-prefix) - 2 (sauf /31 et /32)
  • Wildcard = inverse du masque, utilisé dans les ACL Cisco
  • Les sous-réseaux doivent être alignés sur des puissances de 2

Homelab réseau

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracing. Aujourd'hui, ce site ne couvre même pas mes frais d'hébergement, d'électricité, de matériel, de logiciels, mais surtout de cafés.

Un soutien régulier, même symbolique, m'aide à garder ces ressources gratuites et à continuer de produire des guides de qualité. Merci pour votre appui.