Estou trabalhando em uma alteração em um aplicativo Java EE que seria autenticado com base no endereço IP do usuário usando ServletRequest.getRemoteAddr . Armazenamos intervalos de endereços IP (FROM_IP e TO_IP) em um banco de dados e o sistema seria autenticado apenas se o endereço IP de um usuário cair em um intervalo.
Agora, os testadores apontaram que o dígito 0 (zero) não deve ser permitido nos valores FROM_IP e TO_IP (em qualquer lugar). Observe que este é um aplicativo voltado para a Internet e, portanto, obteremos apenas endereços IP públicos.
Os testadores estão certos ao sugerir essa validação? Por que não podemos ter zero no valor do intervalo, como em 167.23.0.1 - 167.23.255.255?
ip
authentication
ip-address
ipv4
Ritesh
fonte
fonte
Respostas:
Não, eles estão completamente incorretos.
De fato, este é um endereço IP válido:
192.168.24.0
Como está
167.23.0.1
.A separação do endereço IP em segmentos pontilhados é uma conveniência puramente humana para exibição. É muito mais fácil lembrar do
192.168.1.42
que3232235818
.O que importa para computadores é a separação (máscara de rede). Não é válido ter um endereço de host com a seção host do endereço totalmente definida como 0 ou 1.
Portanto, 192.168.24.0, desde que a máscara de rede seja tal que alguns bits sejam configurados na parte do host. Veja os seguintes cálculos:
Nesse caso, a parte do endereço (lado direito) possui 2 bits definidos. Este é um endereço de host válido na sub-rede 192.168.0.0/16.
Nesse caso, a parte do endereço possui 10 bits definidos e 6 bits não definidos. Este é outro endereço de host válido na mesma sub-rede.
Nesse caso, a parte do endereço tem zero bits definidos. Este não é um endereço de host válido na rede 192.168.24.0/24.
fonte
ping 2130706432
, ouping 017700000001
(sim, mesmo no Windows). Você pode se surpreender com os resultados.192.168.0.257
está incorreto, mas192.168.257
é uma representação correta de192.168.1.1
(como está192.11010305
). Vejainet_aton(3)
.A menos que eu esteja entendendo errado, seus testadores estão completamente errados. Endereços IP válidos certamente podem ter um 0 neles.
fonte
Em geral: não, não importa se existe um 0 no endereço ou não.
No entanto, há um certo grau de verdade no que seus testadores estão dizendo. Em alguns casos, equipamentos de rede antigos ou quebrados não funcionarão corretamente em endereços com 0 nos últimos octestes. Isso ocorre devido às antigas regras de roteamento classfull. No roteamento Classfull, você pode dizer a máscara de rede a partir do primeiro octeto do endereço. Se o equipamento ainda seguir regras de roteamento classfull, é provável que ele manipule um endereço como 200.100.1.0/16 incorretamente.
fonte
Digamos que você precise de 510 endereços IP em um intervalo e seu endereço de rede seja 192.1.1.0, você teria uma sub-rede / 23, da qual um dos IPs do host é um endereço IP .0, seus testadores estão errados se o endereço .0 é um endereço de host. Se você tem uma rede / 24, seria correto dizer que estava errado.
fonte
Para fornecer uma resposta muito simples: Um ou mais zeros em um endereço IP são perfeitamente válidos para endereços de host, desde que esses endereços não sejam o endereço de rede ou de broadcast.
Os endereços de rede e transmissão são endereços IP válidos, mas não podem ser utilizados pelos hosts.
fonte