fundo
Inspirado por essa pergunta do Unix.SE (e, claro, minha própria resposta ).
Quando um endereço IP é especificado para uma interface, geralmente é fornecido na forma decimal com pontos:
a.b.c.d e.f.g.h
onde a.b.c.d
é o endereço real e e.f.g.h
é a máscara de rede.
A máscara de rede, quando representada em binário, é basicamente um monte de 1
bits seguido por um monte de 0
bits. Quando a máscara de rede é AND bit a bit no endereço IP fornecido, o resultado será a parte da rede do endereço ou simplesmente o endereço de rede . Isso será programado na tabela de rotas do host para que o host saiba enviar qualquer coisa destinada a esta rede por essa interface.
O endereço de broadcast de uma rede é obtido pegando o endereço de rede (de cima) e configurando todos os bits do host como 1. O endereço de broadcast é usado para enviar a todos os endereços dentro da rede especificada.
Desafio
Dado um endereço IP decimal com pontos e uma máscara de rede válida como entrada, forneça o endereço de rede e o endereço de broadcast como saída, também no formato decimal com pontos.
- A entrada deve ser endereço e máscara como duas cadeias de caracteres no formato decimal com pontos. Você pode passar isso como 2 cadeias separadas, como lista ou matriz de 2 elementos de cadeia ou uma única cadeia com o endereço e a máscara separados por algum separador sensível.
- O formato de saída está sujeito às mesmas restrições que o formato de entrada.
Exemplos
Input Output
192.168.0.1 255.255.255.0 192.168.0.0 192.168.0.255
192.168.0.0 255.255.255.0 192.168.0.0 192.168.0.255
192.168.0.255 255.255.255.0 192.168.0.0 192.168.0.255
100.200.100.200 255.255.255.255 100.200.100.200 100.200.100.200
1.2.3.4 0.0.0.0 0.0.0.0 255.255.255.255
10.25.30.40 255.252.0.0 10.24.0.0 10.27.255.255
252
nele.
10.24.0.0 10.27.255.255
?