Je travaille actuellement sur une modification d'une application Java EE qui s'authentifierait en fonction 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'authentifierait que si l'adresse IP d'un utilisateur se situait dans une plage.
Maintenant, les testeurs ont fait remarquer que le chiffre 0 (zéro) ne devrait pas être autorisé dans les valeurs FROM_IP et TO_IP (n'importe où). Notez qu'il s'agit d'une application orientée Internet et que nous n'obtiendrons que des adresses IP publiques.
Les testeurs ont-ils raison de suggérer cette validation? Pourquoi ne pouvons-nous pas avoir zéro dans la valeur de plage comme dans 167.23.0.1 - 167.23.255.255?
la source
Réponses:
Non, ils sont complètement incorrects.
En fait, c'est une adresse IP valide:
192.168.24.0
Tel quel
167.23.0.1
.La séparation de l'adresse IP en segments en pointillés est un avantage purement humain pour l'affichage. C'est beaucoup plus facile à retenir
192.168.1.42
que3232235818
.Ce qui compte pour les ordinateurs, c'est la séparation (masque de réseau). Il n'est pas valide d'avoir une adresse d'hôte avec la section hôte de l'adresse entièrement définie sur 0 ou 1.
Ainsi, 192.168.24.0 tant que le masque de réseau est tel que certains bits sont définis dans la partie hôte. Voir les calculs suivants:
Dans ce cas, la partie adresse (côté droit) a 2 bits définis. C'est une adresse d'hôte valide dans le sous-réseau 192.168.0.0/16.
Dans ce cas, la partie adresse a 10 bits définis et 6 bits non définis. Ceci est une autre adresse d'hôte valide dans le même sous-réseau.
Dans ce cas, la partie adresse a zéro bit défini. Ce n'est pas une adresse d'hôte valide dans le réseau 192.168.24.0/24.
la source
ping 2130706432
, ouping 017700000001
(oui, même sous Windows). Vous pourriez être surpris par les résultats.192.168.0.257
est incorrect, mais192.168.257
est une représentation correcte de192.168.1.1
(tel quel192.11010305
). Voirinet_aton(3)
.À moins que je ne comprenne mal, vos testeurs ont complètement tort. Les adresses IP valides peuvent certainement contenir un 0.
la source
En général: Non, peu importe qu'il y ait ou non un 0 dans l'adresse.
Cependant, il y a un grain de vérité dans ce que disent vos testeurs. Dans certains cas, les équipements réseau anciens ou défectueux ne fonctionneront pas correctement sur les adresses avec 0 dans les derniers octets. Cela est dû aux anciennes règles de routage classfull. Dans le routage Classfull, vous pouvez distinguer le masque de réseau du premier octet de l'adresse. Si l'équipement respecte toujours les règles de routage de classe, il risque de ne pas gérer correctement une adresse telle que 200.100.1.0/16.
la source
Supposons que vous avez besoin de 510 adresses IP dans une plage et que votre adresse réseau est 192.1.1.0, vous auriez un sous-réseau / 23, dont l'une des adresses IP de votre hôte est une adresse IP .0. Vos testeurs se trompent si l'adresse .0 est une adresse d'hôte. Si vous avez un réseau / 24 il serait juste de dire que c'était faux.
la source
Pour fournir une réponse très simple: un ou plusieurs zéros dans une adresse IP sont parfaitement valables pour les adresses d’hôte tant que ces adresses ne sont pas l’adresse de réseau ou de diffusion.
Les adresses réseau et de diffusion sont des adresses IP valides, elles ne sont tout simplement pas utilisables par les hôtes.
la source