IPv4-Adressen sind 32 Bit breit, und daher beträgt die Größe des Adressraums 2 32 oder 4 294 967 296. Dies ist jedoch nur eine theoretische Obergrenze. Es ist keine genaue Darstellung aller Adressen, die tatsächlich im öffentlichen Internet verwendet werden können.
Für die Zwecke dieser Herausforderung wird angenommen, dass alle Adressierungen klassisch sind . In der Realität wurde die klassische Unterteilung des Adressraums durch CIDR (Classless Inter-Domain Routing und VLSM (Subnetzmaskierung variabler Länge)) ersetzt , dies wird jedoch für diese Herausforderung ignoriert.
Nach dem Klassenadressschema gibt es 3 Klassen:
- Klasse A -
0.0.0.0
bis127.255.255.255
mit/8
Netzmaskenlänge - Klasse B -
128.0.0.0
bis191.255.255.255
mit/16
Netzmaskenlänge - Klasse C -
192.0.0.0
bis223.255.255.255
mit/24
Netzmaskenlänge
Die Klassen D (Multicast) und E (reserviert) sind ebenfalls definiert, werden jedoch nicht für öffentliche Unicast-Adressen verwendet.
Jede Klasse ist gemäß der Netzmaske für diese Klasse in Netzwerke unterteilt.
Dies 3.0.0.0
ist ein Beispiel für ein Klasse-A-Netzwerk. Die Netzmaskenlänge für Klasse A beträgt 8, daher ist der volle Adressraum für dieses Netzwerk 3.0.0.0
zu 3.255.255.255
. Die erste Adresse ( 3.0.0.0
) ist jedoch als Netzwerkadresse reserviert, und die letzte Adresse ( 3.255.255.255
) ist als Broadcast-Adresse für dieses Netzwerk reserviert. Somit ist der tatsächliche Bereich verwendbarer Adressen 3.0.0.1
zu 3.255.255.254
, die 2 24 - 2 (= 16.777.214) alle Adressen.
In ähnlicher Weise 200.20.30.0
ist ein Beispiel für ein Klasse-C-Netzwerk. Die Netzmaskenlänge für Klasse C beträgt 24, daher ist der volle Adressraum für dieses Netzwerk 200.20.30.0
zu 200.20.30.255
. Durch das Entfernen der Netzwerk- und Broadcast-Adressen bleibt der tatsächliche Bereich der verwendbaren Adressen, 200.20.30.1
zu 200.20.30.254
denen 2 8 - 2 (= 254) Gesamtadressen gehören.
Es gibt weitere Einschränkungen für Adressbereiche, die für öffentliches Unicast verwendet werden können. Gemäß RFC 6890 sind die unzulässigen Bereiche:
0.0.0.0/8
- Lokale Vernetzung10.0.0.0/8
- Privater Gebrauch100.64.0.0/10
- Gemeinsamer Adressraum127.0.0.0/8
- Loopback169.254.0.0/16
- Lokale Verbindung172.16.0.0/12
- Privater Gebrauch192.0.0.0/24
- IETF-Protokollzuweisungen192.0.2.0/24
- Reserviert für die Verwendung in der Dokumentation192.88.99.0/24
- 6to4 Relay Anycast192.168.0.0/16
- Privater Gebrauch198.18.0.0/15
- Benchmarking198.51.100.0/24
- Reserviert für die Verwendung in der Dokumentation203.0.113.0/24
- Reserviert für die Verwendung in der Dokumentation
Beachten Sie, dass in der obigen Liste VLSR-Netzmasken verwendet werden, um einen Bereich effizient anzugeben. In allen bis auf einen Fall ist die Spezifität der angegebenen Maskenlänge kleiner oder gleich der normalen klassischen Maskenlänge für den Beginn des Bereichs. Somit entspricht jeder dieser VLSR-Bereiche einem oder mehreren klassischen Netzwerken. Eg 172.16.0.0/12
ist äquivalent zu der Klasse B - Netzwerke 172.16.0.0
zu 172.31.0.0
oder den Adressbereich 172.16.0.0
zu 172.31.255.255
.
Die Ausnahme von dieser Regel ist der 100.64.0.0/10
VLSR-Bereich, der spezifischer ist als der enthaltende 100.0.0.0
Klasse-A-Bereich. Daher 100.0.0.0
wird es wie andere Bereiche der Klasse A behandelt, mit der Ausnahme, dass es in der Mitte ein Loch mit 4.194.304 Adressen gibt. Die gültigen Adressen in diesem Bereich der Klasse A lauten 100.0.0.0
auf 100.63.255.255
und 100.128.0.0
bis 100.255.255.254
insgesamt 2 24 - 2 22 - 2 (= 12.582.910) Gesamtadressen.
Ziel dieser Herausforderung ist es, alle Unicast-IPv4-Adressen der Klassen A, B und C auszugeben, die einem öffentlichen Internet-Host gültig zugewiesen werden können (dh mit Ausnahme der oben beschriebenen).
Es wird keine Eingabe gegeben und sollte nicht erwartet werden.
Die Ausgabe kann in einer für Ihre Sprache geeigneten Form erfolgen, z. B. Array, Liste, begrenzte Zeichenfolge. Adressen müssen im Standardformat für gepunktete Dezimalstellen ausgegeben werden.
Ausgabereihenfolge spielt keine Rolle.
Builtins, die speziell die erforderlichen Adressbereiche angeben, sind nicht zulässig. Ebenso sind Methoden zur dynamischen Überprüfung einer BGP- Routing-Tabelle (oder einer anderen Protokoll-Routing-Tabelle) für das öffentliche Internet nicht zulässig.
Die numerisch niedrigste Adresse ist 1.0.0.1
und die numerisch höchste Adresse 223.255.255.254
.
Diese Herausforderung ähnelt dem Ausdrucken aller IPv6-Adressen , sollte jedoch aufgrund der Einschränkungen eine nicht trivial unterschiedliche Implementierung erfordern.
@echo off
.