Os endereços IPv4 têm 32 bits de largura e, portanto, o tamanho do espaço de endereço é 2 32 ou 4.294.967.296. No entanto, este é apenas um limite superior teórico. Não é uma representação precisa de todos os endereços que realmente podem ser usados na Internet pública.
Para os propósitos deste desafio, supõe-se que todo o endereçamento seja de classe . Na realidade, a subdivisão de classe do espaço de endereço foi substituída pelo CIDR (roteamento entre domínios sem classe e VLSM (mascaramento de sub-rede de comprimento variável) , mas isso é ignorado para esse desafio.
De acordo com o esquema de endereço classful, existem 3 classes:
- Classe A -
0.0.0.0
para127.255.255.255
com/8
comprimento máscara - Classe B -
128.0.0.0
para191.255.255.255
com/16
comprimento da máscara de rede - Classe C -
192.0.0.0
para223.255.255.255
com/24
comprimento máscara
As classes D (multicast) e E (reservadas) também são definidas, mas não são usadas para endereços unicast públicos.
Cada classe é subdividida em redes de acordo com a máscara de rede para essa classe.
Assim, 3.0.0.0
é um exemplo de uma rede de classe A. O comprimento máscara de rede para a classe A é de 8, de modo que o espaço de endereço completo para esta rede é 3.0.0.0
a 3.255.255.255
. No entanto, o primeiro endereço ( 3.0.0.0
) é reservado como endereço de rede e o último endereço ( 3.255.255.255
) é reservado como endereço de transmissão para essa rede. Assim, a gama efectiva de endereços utilizáveis é 3.0.0.1
a 3.255.255.254
que é de 2 24 de - 2 (= 16.777.214) endereços totais.
Da mesma forma, 200.20.30.0
é um exemplo de rede de Classe C. O comprimento máscara de rede para a classe C é de 24, de modo que o espaço de endereço total para esta rede é 200.20.30.0
a 200.20.30.255
. A remoção dos endereços de rede e transmissão deixa o intervalo real de endereços utilizáveis 200.20.30.1
para o 200.20.30.254
qual são 2 8 - 2 (= 254) endereços totais.
Existem outras limitações nos intervalos de endereços que podem ser usados para unicast público. De acordo com a RFC 6890 , os intervalos não permitidos são:
0.0.0.0/8
- Rede local10.0.0.0/8
- Uso privado100.64.0.0/10
- Espaço de Endereço Compartilhado127.0.0.0/8
- Loopback169.254.0.0/16
- Link Local172.16.0.0/12
- Uso privado192.0.0.0/24
- Atribuições do protocolo IETF192.0.2.0/24
- Reservado para uso em documentação192.88.99.0/24
- Relé 6to4 Anycast192.168.0.0/16
- Uso privado198.18.0.0/15
- Avaliação comparativa198.51.100.0/24
- Reservado para uso em documentação203.0.113.0/24
- Reservado para uso em documentação
Observe que a lista acima usa máscaras de rede VLSR para especificar com eficiência um intervalo. Em todos os casos, exceto um, o comprimento da máscara fornecido tem especificidade menor ou igual ao comprimento normal da máscara classful para o início do intervalo. Assim, cada um desses intervalos VLSR é equivalente a uma ou mais redes classful. Por exemplo, 172.16.0.0/12
é equivalente às redes de Classe B 172.16.0.0
para 172.31.0.0
ou o intervalo de endereços 172.16.0.0
para 172.31.255.255
.
A exceção a esta regra é o 100.64.0.0/10
intervalo VLSR, que é mais específico que o 100.0.0.0
intervalo Classe A que contém . Assim 100.0.0.0
, será tratado como outros intervalos de classe A, com a exceção de que possui um orifício de 4.194.304 endereços no meio. Os endereços válidos nesse intervalo de Classe A serão 100.0.0.0
de 100.63.255.255
e 100.128.0.0
para 100.255.255.254
, um total de 2 24 - 2 22 - 2 (= 12.582.910) total de endereços.
O objetivo deste desafio é produzir todos os endereços IPv4 unicast de Classe A, B e C que possam ser atribuídos validamente a um host público da Internet (excluindo os detalhados acima).
Nenhuma entrada será fornecida e não deve ser esperada.
A saída pode ser de qualquer forma conveniente para o seu idioma, por exemplo, array, lista, string delimitada. Os endereços devem ser impressos no formato decimal pontilhado padrão.
A ordem de saída não importa.
Os componentes internos que fornecem especificamente os intervalos de endereços necessários não são permitidos. Da mesma forma, quaisquer métodos para inspecionar dinamicamente uma tabela de roteamento BGP (ou outro protocolo) da Internet pública são proibidos.
O endereço numericamente mais baixo será 1.0.0.1
e o numericamente mais alto será 223.255.255.254
.
Esse desafio é semelhante ao Imprimir todos os endereços IPv6 , mas devido às restrições deve exigir uma implementação não trivialmente diferente.
@echo off
também.