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