Je travaille sur une modification d'un Java application EE qui s'authentifierait en fonction de l'adresse IP de l'utilisateur à l'aide de servletrequest.getremOteaddr . Nous stockons des gammes d'adresses IP (de_ip et to_ip ) Dans une base de données et le système s'authentifieraient uniquement si l'adresse IP d'un utilisateur tombe dans une plage.
Maintenant, les testeurs ont souligné que le chiffre 0 (zéro) ne doit pas être autorisé dans des valeurs_ip et to_ip (dans n'importe quel endroit). Notez qu'il s'agit d'une application d'Internet confrontée, et nous n'aurons donc que des adresses IP publiques.
Les testeurs ont-ils raison de suggérer que la validation? Pourquoi ne pouvons-nous pas avoir de zéro dans la valeur de la plage, telle que 167.23.0.1 - 167.23.255.255?
Non, ils sont complètement incorrects.
En fait, il s'agit d'une adresse IP valide: 192.168.24.0
Comme si 167.23.0.1
.
La séparation de l'adresse IP en segments en pointillé est une commodité purement humaine pour l'affichage. Il est beaucoup plus facile de se rappeler 192.168.1.42
que 3232235818
.
Ce qui compte pour les ordinateurs est la séparation (Netmask). Il n'est pas valide d'avoir une adresse d'hôte avec la section hôte de l'adresse définie entièrement sur 0 ou 1.
Donc, 192.168.24.0 Tant que le masque Netmasque est tel que des bits sont définis 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 d'adresse (côté droit) a 2 bits définies. 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 d'adresse a 10 bits définies et 6 bits non défini. Ceci est 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 d'adresse a une zéro bits définie. Ce n'est pas une adresse d'hôte valide dans le réseau 192.168.24.0/24.
Sauf si je suis mal compris, vos testeurs sont mal morts. Les adresses IP valides peuvent certainement avoir une 0 en eux.
En général: Non, peu importe qu'il y ait 0 dans l'adresse ou non.
Cependant, il y a un grain de vérité dans ce que vos testeurs disent. Dans certains cas, l'équipement réseau ancien ou brisé ne fonctionnera pas correctement sur les adresses avec 0 dans les dernières octêtes. Cela est dû aux anciennes règles de routage classiques. Dans le routage classique, vous pouvez indiquer au Netmask du premier octet de l'adresse. Si l'équipement suit toujours les règles de routage classiques, il est susceptible de gérer une adresse de 200,100.1.0/16 de manière incorrecte.
Disons que vous avez besoin de 510 adresses IP dans une plage et de votre adresse réseau est de 192.1.1.0, vous auriez un sous-réseau A/23, dont une adresse IP hôte est une adresse IP .0, vos testeurs sont fausses si l'adresse .0 est une adresse hôte. Si vous avez un réseau A/24, il serait vrai de dire que c'était faux.
Pour fournir une réponse très simple: un ou plusieurs zéros d'une adresse IP sont parfaitement valables pour les adresses hôtes tant que ces adresses ne sont pas le réseau ou l'adresse de diffusion.
Les adresses de réseau et de diffusion sont des adresses IP valides, elles ne sont tout simplement pas utilisables par les hôtes.