Les adresses IPv4 ont une largeur de 32 bits, et donc la taille de l'espace d'adressage est de 2 32 ou 4 294 967 296. Cependant, ce n'est qu'une limite supérieure théorique. Il ne s'agit pas d'une représentation précise de toutes les adresses qui peuvent effectivement être utilisées sur l'Internet public.
Aux fins de ce défi, il est supposé que tout adressage est de classe . En réalité, la subdivision classe de l'espace d'adressage a été remplacée par le CIDR (Classless Inter-Domain Routing et VLSM (Variable Length Subnet Masking)) , mais cela est ignoré pour ce défi.
Selon le schéma d'adresse par classe, il existe 3 classes:
- Classe A -
0.0.0.0
à127.255.255.255
avec/8
longueur de masque de réseau - Classe B -
128.0.0.0
à191.255.255.255
avec/16
longueur de masque de réseau - Classe C -
192.0.0.0
à223.255.255.255
avec/24
longueur de masque de réseau
Les classes D (multidiffusion) et E (réservées) sont également définies, mais elles ne sont pas utilisées pour les adresses de monodiffusion publiques.
Chaque classe est subdivisée en réseaux selon le masque de réseau de cette classe.
3.0.0.0
Voici donc un exemple de réseau de classe A. La longueur du masque de réseau pour la classe A est 8, donc l'espace d'adressage complet de ce réseau est 3.0.0.0
de 3.255.255.255
. Cependant, la première adresse ( 3.0.0.0
) est réservée comme adresse réseau et la dernière adresse ( 3.255.255.255
) est réservée comme adresse de diffusion pour ce réseau. Ainsi, la plage réelle d'adresses utilisables est celle 3.0.0.1
à 3.255.255.254
laquelle se trouvent 2 24 - 2 (= 16 777 214) adresses totales.
De même, 200.20.30.0
est un exemple de réseau de classe C. La longueur du masque de réseau pour la classe C est de 24, donc l'espace d'adressage complet de ce réseau est 200.20.30.0
de 200.20.30.255
. La suppression des adresses de réseau et de diffusion laisse la plage réelle d'adresses utilisables 200.20.30.1
à 200.20.30.254
laquelle se situent 2 8 - 2 (= 254) adresses totales.
Il existe d'autres limitations sur les plages d'adresses qui peuvent être utilisées pour la monodiffusion publique. Selon la RFC 6890 , les plages interdites sont les suivantes:
0.0.0.0/8
- Réseautage local10.0.0.0/8
- Usage privé100.64.0.0/10
- Espace d'adressage partagé127.0.0.0/8
- Boucle169.254.0.0/16
- Lien local172.16.0.0/12
- Usage privé192.0.0.0/24
- Affectations de protocole IETF192.0.2.0/24
- Réservé pour une utilisation dans la documentation192.88.99.0/24
- Anycast relais 6to4192.168.0.0/16
- Usage privé198.18.0.0/15
- Analyse comparative198.51.100.0/24
- Réservé pour une utilisation dans la documentation203.0.113.0/24
- Réservé pour une utilisation dans la documentation
Notez que la liste ci-dessus utilise des masques de réseau VLSR pour spécifier efficacement une plage. Dans tous les cas sauf un, la longueur de masque donnée a une spécificité inférieure ou égale à la longueur de masque de classe normale pour le début de la plage. Ainsi, chacune de ces plages VLSR équivaut à un ou plusieurs réseaux avec classe. Par exemple , 172.16.0.0/12
est équivalent aux réseaux de classe B 172.16.0.0
à 172.31.0.0
ou la plage d'adresses 172.16.0.0
à 172.31.255.255
.
L'exception à cette règle est la 100.64.0.0/10
plage VLSR, qui est plus spécifique que la 100.0.0.0
plage de classe A contenant . Ainsi, 100.0.0.0
il sera traité comme les autres gammes de classe A, à l'exception qu'il a un trou d'adresse de 4 194 304 adresses au milieu. Les adresses valides dans cette plage de classe A seront 100.0.0.0
vers 100.63.255.255
et 100.128.0.0
vers 100.255.255.254
, un total de 2 24 - 2 22 - 2 (= 12 582 910) adresses totales.
Le but de ce défi est de produire toutes les adresses IPv4 unicast de classe A, B et C qui peuvent être valablement attribuées à un hôte Internet public (c'est-à-dire à l'exclusion de celles détaillées ci-dessus).
Aucune contribution ne sera donnée et ne devrait pas être attendue.
La sortie peut être sous n'importe quelle forme convenant à votre langue, par exemple tableau, liste, chaîne délimitée. Les adresses doivent être sorties au format décimal pointé standard.
L'ordre de sortie n'a pas d'importance.
Les fonctions intégrées qui donnent spécifiquement les plages d'adresses requises sont interdites. De même, toutes les méthodes pour inspecter dynamiquement une table de routage BGP (ou autre protocole) pour l'Internet public sont interdites.
L'adresse numériquement la plus basse sera 1.0.0.1
et la numériquement la plus élevée sera 223.255.255.254
.
Ce défi est similaire à Imprimer toutes les adresses IPv6 , mais en raison des restrictions, il devrait nécessiter une implémentation non triviale différente.
@echo off
plus.