Gli indirizzi IPv4 hanno una larghezza di 32 bit e quindi la dimensione dello spazio degli indirizzi è 2 32 o 4.294.967.296. Tuttavia, questo è solo un limite superiore teorico. Non è una rappresentazione accurata di tutti gli indirizzi che possono essere effettivamente utilizzati su Internet pubblico.
Ai fini di questa sfida, si presume che tutti gli indirizzi siano di classe . In realtà, la suddivisione di classe dello spazio degli indirizzi è stata sostituita dal CIDR (Classless Inter-Domain Routing e VLSM (Variable Length Subnet Masking) , ma questo viene ignorato per questa sfida.
Secondo lo schema di indirizzi di classe, ci sono 3 classi:
- Classe A -
0.0.0.0
a127.255.255.255
con/8
lunghezza di maschera di rete - Classe B -
128.0.0.0
a191.255.255.255
con/16
lunghezza di maschera di rete - Classe C -
192.0.0.0
a223.255.255.255
con/24
lunghezza di maschera di rete
Sono definite anche le classi D (multicast) ed E (riservato), ma non utilizzate per gli indirizzi unicast pubblici.
Ogni classe è suddivisa in reti in base alla maschera di rete per quella classe.
Quindi 3.0.0.0
è un esempio di una rete di classe A. La lunghezza maschera di rete per la Classe A è 8, quindi lo spazio indirizzo completo per questa rete è 3.0.0.0
a 3.255.255.255
. Tuttavia, il primo indirizzo ( 3.0.0.0
) è riservato come indirizzo di rete e l'ultimo indirizzo ( 3.255.255.255
) è riservato come indirizzo di trasmissione per quella rete. Pertanto, l'intervallo effettivo di indirizzi utilizzabili è pari 3.0.0.1
a 3.255.255.254
2 24 - 2 (= 16.777.214) indirizzi totali.
Allo stesso modo, 200.20.30.0
è un esempio di una rete di classe C. La lunghezza maschera di rete per la Classe C è di 24, quindi lo spazio indirizzo completo per questa rete è 200.20.30.0
a 200.20.30.255
. Rimozione sugli indirizzi di rete e broadcast foglie la portata effettiva di indirizzi utilizzabili sia 200.20.30.1
per 200.20.30.254
cui è 2 8 - 2 (= 254) indirizzi totali.
Esistono ulteriori limitazioni sugli intervalli di indirizzi che possono essere utilizzati per l'unicast pubblico. Secondo RFC 6890 , le gamme non consentite sono:
0.0.0.0/8
- Networking locale10.0.0.0/8
- Uso privato100.64.0.0/10
- Spazio indirizzi condiviso127.0.0.0/8
- Loopback169.254.0.0/16
- Collegamento locale172.16.0.0/12
- Uso privato192.0.0.0/24
- Assegnazioni protocollo IETF192.0.2.0/24
- Riservato per l'uso nella documentazione192.88.99.0/24
- 6to4 relè Anycast192.168.0.0/16
- Uso privato198.18.0.0/15
- Analisi comparativa198.51.100.0/24
- Riservato per l'uso nella documentazione203.0.113.0/24
- Riservato per l'uso nella documentazione
Si noti che l'elenco sopra utilizza maschere di rete VLSR per specificare in modo efficiente un intervallo. In tutti i casi tranne uno, la lunghezza della maschera specificata ha specificità inferiore o uguale alla lunghezza della maschera normale normale per l'inizio dell'intervallo. Pertanto, ciascuno di questi intervalli VLSR equivale a una o più reti di classe. Ad esempio 172.16.0.0/12
è equivalente alle reti 172.16.0.0
di classe B 172.31.0.0
o all'intervallo di indirizzi 172.16.0.0
a 172.31.255.255
.
L'eccezione a questa regola è l' 100.64.0.0/10
intervallo VLSR, che è più specifico dell'intervallo di 100.0.0.0
classe A contenente . Pertanto 100.0.0.0
verrà gestito come altri intervalli di classe A, con l'eccezione che ha un foro di 4.194.304 indirizzi nel mezzo. Gli indirizzi validi in questo intervallo di Classe A saranno 100.0.0.0
verso 100.63.255.255
e 100.128.0.0
verso 100.255.255.254
, per un totale di 2 24 - 2 22 - 2 (= 12.582.910) indirizzi totali.
L'obiettivo di questa sfida è fornire tutti gli indirizzi IPv4 unicast di classe A, B e C che possono essere validamente assegnati a un host Internet pubblico (vale a dire escludendo quelli descritti sopra).
Non verrà fornito alcun input e non dovrebbe essere previsto.
L'output può essere in qualsiasi forma conveniente per la tua lingua, ad esempio array, elenco, stringa delimitata. Gli indirizzi devono essere emessi in formato decimale puntato standard.
L'ordine di uscita non ha importanza.
Non sono consentiti builtin che specificatamente forniscono gli intervalli di indirizzi richiesti. Allo stesso modo è vietato qualsiasi metodo per ispezionare dinamicamente una tabella di routing BGP (o altro protocollo) per Internet pubblica.
L'indirizzo numericamente più basso sarà 1.0.0.1
e quello numericamente più alto sarà 223.255.255.254
.
Questa sfida è simile a Stampa tutti gli indirizzi IPv6 , ma a causa delle restrizioni dovrebbe richiedere un'implementazione non banalmente diversa.
@echo off
, pure.