36 votes

Une partie d'une adresse IPv4 peut-elle être mise à zéro ?

Je travaille sur une modification d'une application Java EE qui s'authentifierait sur la base de l'adresse IP de l'utilisateur à l'aide de ServletRequest.getRemoteAddr . Nous stockons des plages d'adresses IP (FROM_IP et TO_IP) dans une base de données et le système ne s'authentifie que si l'adresse IP d'un utilisateur se situe dans une plage donnée.

Les testeurs ont signalé que le chiffre 0 (zéro) ne devrait pas être autorisé dans les valeurs FROM_IP et TO_IP (à quelque endroit que ce soit). Notez qu'il s'agit d'une application tournée vers l'Internet, et que nous n'obtiendrons donc que des adresses IP publiques.

Les testeurs ont-ils raison de suggérer cette validation ? Pourquoi ne pouvons-nous pas avoir un zéro dans la plage de valeurs comme dans 167.23.0.1 - 167.23.255.255 ?

74voto

MikeyB Points 38317

Non, ils sont totalement erronés.

En fait, il s'agit d'une adresse IP valide : 192.168.24.0

En l'état 167.23.0.1 .

La séparation de l'adresse IP en segments pointillés est une commodité d'affichage purement humaine. Il est beaucoup plus facile de se souvenir 192.168.1.42 que 3232235818 .

Ce qui compte pour les ordinateurs, c'est la séparation (masque de réseau). Il n'est pas possible d'avoir une adresse d'hôte dont la partie hôte de l'adresse est entièrement réglée sur 0 ou 1.

Donc, 192.168.24.0 tant que le masque de réseau est tel que certains bits sont placés dans la partie hôte. Voir les calculs suivants :


michael@challenger:~$ ipcalc 192.168.24.0/16
Address:   192.168.24.0         11000000.10101000. 00011000.00000000
Netmask:   255.255.0.0 = 16     11111111.11111111. 00000000.00000000
Wildcard:  0.0.255.255          00000000.00000000. 11111111.11111111
=>
Network:   192.168.0.0/16       11000000.10101000. 00000000.00000000
HostMin:   192.168.0.1          11000000.10101000. 00000000.00000001
HostMax:   192.168.255.254      11000000.10101000. 11111111.11111110
Broadcast: 192.168.255.255      11000000.10101000. 11111111.11111111
Hosts/Net: 65534                 Class C, Private Internet

Dans ce cas, la partie adresse (côté droit) comporte 2 bits. Il s'agit d'une adresse d'hôte valide dans le sous-réseau 192.168.0.0/16.


michael@challenger:~$ ipcalc 192.168.24.255/16
Address:   192.168.24.255       11000000.10101000. 00011000.11111111
Netmask:   255.255.0.0 = 16     11111111.11111111. 00000000.00000000
Wildcard:  0.0.255.255          00000000.00000000. 11111111.11111111
=>
Network:   192.168.0.0/16       11000000.10101000. 00000000.00000000
HostMin:   192.168.0.1          11000000.10101000. 00000000.00000001
HostMax:   192.168.255.254      11000000.10101000. 11111111.11111110
Broadcast: 192.168.255.255      11000000.10101000. 11111111.11111111
Hosts/Net: 65534                 Class C, Private Internet

Dans ce cas, la partie adresse comporte 10 bits activés et 6 bits désactivés. Il s'agit d'une autre adresse d'hôte valide dans le même sous-réseau.


michael@challenger:~$ ipcalc 192.168.24.0/24
Address:   192.168.24.0         11000000.10101000.00011000. 00000000
Netmask:   255.255.255.0 = 24   11111111.11111111.11111111. 00000000
Wildcard:  0.0.0.255            00000000.00000000.00000000. 11111111
=>
Network:   192.168.24.0/24      11000000.10101000.00011000. 00000000
HostMin:   192.168.24.1         11000000.10101000.00011000. 00000001
HostMax:   192.168.24.254       11000000.10101000.00011000. 11111110
Broadcast: 192.168.24.255       11000000.10101000.00011000. 11111111
Hosts/Net: 254                   Class C, Private Internet

Dans ce cas, la partie adresse comporte zéro bit. Il ne s'agit pas d'une adresse d'hôte valide dans le réseau 192.168.24.0/24.

18voto

Samat Jain Points 165

Sauf erreur de ma part, vos testeurs ont tout faux. Les adresses IP valides peuvent certainement contenir un 0.

13voto

pehrs Points 8739

En général : Non, la présence ou non d'un 0 dans l'adresse n'a pas d'importance.

Cependant, il y a une part de vérité dans ce que disent vos testeurs. Dans certains cas, les équipements de réseau anciens ou défectueux ne fonctionneront pas correctement sur les adresses dont le dernier octave est un 0. Cela est dû aux anciennes règles de routage classfull. Dans le routage Classfull, vous pouvez déterminer le masque de réseau à partir du premier octet de l'adresse. Si l'équipement suit toujours les règles de routage classfull, il est probable qu'il traitera une adresse comme 200.100.1.0/16 de manière incorrecte.

4voto

Lucas Kauffman Points 16740

Supposons que vous ayez besoin de 510 adresses IP dans une plage et que l'adresse de votre réseau soit 192.1.1.0, vous auriez un sous-réseau /23, dont l'une des IP hôtes est une adresse IP .0. Vos testeurs se trompent si l'adresse .0 est une adresse hôte. Si vous avez un réseau /24, il serait juste de dire qu'il est erroné.

3voto

joeqwerty Points 106914

Pour apporter une réponse très simple : Un ou plusieurs zéros dans une adresse IP sont parfaitement valables pour les adresses d'hôtes tant que ces adresses ne sont pas des adresses de réseau ou de diffusion.

Les adresses de réseau et de diffusion sont des adresses IP valides, mais elles ne sont pas utilisables par les hôtes.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X