Question Les adresses IP avec et sans zéros non significatifs sont-elles les mêmes?


J'ai un système de sécurité et le paramétrage réseau n'autorise qu'une adresse IP à trois chiffres. Je ne peux pas le configurer 192.168.2.100, au lieu de cela je dois utiliser 192.168.002.100.

Ces deux adresses IP sont-elles différentes? Dois-je configurer le LAN de mon routeur pour qu'il soit tout? 192.168.xxx.xxx pour que cela fonctionne correctement? Je ne trouve aucune information solide à ce sujet.


83
2017-12-28 02:45


origine


En suivant les réponses ci-dessous, 192.168.020.100 devrait ne pas être le même que 192.168.20.100, mais il mai Soyez le même si votre système ne permet d'entrer les adresses IP que de cette manière (j'ai vu cela avec les copieurs lorsque l'IP est saisi chiffre par chiffre avec les flèches haut-bas). - Si votre système a cette bizarrerie même lorsque la saisie au clavier "normale" est possible (c'est-à-dire que vous pouvez entrée technicall 192.168.2.100, mais il se plaint), alors je suggère que vous ayez un mot avec le fournisseur (Quelle est la fiabilité du système de sécurité si sa validation des entrées est si minable?) - Hagen von Eitzen
C'est vraiment une validation assez bizarre. Je changerais de système de sécurité, comme le fait allusion @Hagen. - Lightness Races in Orbit
Cela peut aussi être spécifique au logiciel. Ils sont valables avec ou sans les principaux 0s, mais je suis tombé sur des applications ne prenant pas en charge une adresse IP qui ne contenait pas 3 chiffres dans chaque octet. - ps2goat
Toutes les adresses IP (v4) ne sont en réalité que 32 bits représentées d'une manière agréable. Si 192.168.002.100 est ce que représente votre outil 0xc0a80264/3232236132 /192.168.2.100, alors c'est la même chose. - Tim S.
Pouvez-vous s'il vous plaît accepter une autre réponse? Celui que vous avez accepté est vraiment faux (ou au moins incomplet) et comporte 11 valeurs descendantes. - Arjan


Réponses:


En supposant que tous les logiciels que vous utilisez utilisent des points décimaux et des sous-réseaux correctement, oui, ils sont identiques.

192.168.0.1, par exemple, ne représente que la notation décimale amicale de la valeur binaire par points 11000000.10101000.00000000.00000001.

Que vous le tapez comme 192.168.0.1 ou 192.168.000.001, ils sont tous deux égaux à 11000000.10101000.00000000.00000001


64
2017-12-28 02:56



Les points sont aussi pour plus de commodité; la véritable adresse IP est 11000000101010000000000000000001 - cpast
@cpast ou un nombre hexadécimal: C0A80001 - jfs
ou en nombre octal (commençant par 0, avec ou sans points), par ex. ping 0300.0250.2.0144 pour 192.168.2.100 - Sergey
ou en nombre décimal 3232235521 - oldmud0
Comme l'a souligné la réponse de @GreenstoneWalker, de nombreux programmes ne les percevront pas comme les mêmes. un nombre avec un zéro initial (qui ne contient pas les chiffres 8 ou 9) sera compris comme un nombre de notation octal; par conséquent, 010.000.001.063 serait interprété comme "8.0.1.51" (octal 010 = décimal 8; octal 063 = décimal 51) au lieu de "10.0.1.63"! - Doktor J


Cela dépend de l'outil.

Dans la plupart des cas, les deux seront les mêmes, mais pas toujours.

Par exemple, si vous utilisez un nombre à trois chiffres commençant par un zéro (ou un chiffre à deux chiffres commençant par zéro, grâce à @ Dietrich-Epp), alors ping supposera que les nombres sont en octal.

Microsoft Windows [Version 6.3.9600]
(c) 2013 Microsoft Corporation. All rights reserved.

C:\Users>ping 011.012.013.014

Pinging 9.10.11.12 with 32 bytes of data:
Request timed out.
Request timed out.
Request timed out.
Request timed out.

Ping statistics for 9.10.11.12:
    Packets: Sent = 4, Received = 0, Lost = 4 (100% loss),

99
2017-12-28 04:08



Pas tellement ping, mais la routine sous-jacente qu'il utilise inet_addr() - cde
Cela se produit également sur OSX. - Johann Philipp Strathausen
Ce n'est pas parce qu'il a trois chiffres, c'est parce que le nombre a un zéro non significatif. Vous pouvez tester cela en essayant de cingler 09.09.09.09, ce qui ne fonctionne pas car 9 n'est pas valide en octal. - Dietrich Epp


Cela dépend des outils ou des fonctions utilisés par un programme donné pour analyser l'adresse donnée. Microsoft et Linux ainsi que d’autres systèmes d’exploitation utilisent POSIX compatible inet_addr() routine pour l'analyse des adresses.

De nombreux programmes TCP / IP, tels que Ping et FTP, utilisent la fonction de sockets inet_addr () pour traduire les chaînes d'adresses IP en adresses de 4 octets. Cette fonction accepte une adresse IP en notation standard décimale, octale et hexadécimale.
  Microsoft KB115388 Ping et FTP résolvent les adresses IP avec un zéro initial comme octal

La fonction inet_addr () convertit l'adresse d'hôte Internet cp de la notation des nombres et des points IPv4 en données binaires dans l'ordre des octets du réseau.

Dans toutes les formes ci-dessus, les composants de l'adresse en pointillés peuvent être spécifiés en décimal, octal (avec un 0 en tête) ou hexadécimal, avec un 0X en tête. Les adresses de ces formulaires sont collectivement appelées IPv4 notation des nombres et des points. Le formulaire qui utilise exactement quatre nombres décimaux est appelé notation décimale à pointillé IPv4 (ou parfois: notation quadri-pointée IPv4).
inet_addr (3): routines de changement d'adresse Internet - page de manuel Linux

En tant que tel, votre système spécifique peut nécessiter une notation décimale à trois chiffres pour chaque octet, mais cela n'est pas universel, et il faut veiller à ce que l'adresse IP correcte soit saisie.

Bien entendu, seuls les numéros valides pour chaque type fonctionneront. Les nombres octaux, hexadécimaux ou décimaux hors limites échouent ou provoquent des problèmes. Octal 088, Hex 0xGG ou Decimal 280 sont tous des exemples non valides.


35
2017-12-28 17:42



+1 pour la fonction sous-jacente. Pour ajouter, cette fonction provoquera l'échec de l'analyse IP si un octet valide (par exemple, 88) est rempli à zéro, car 8 n'est pas un nombre valide en octal. - March Ho
Dans Windows XP (et avant), la fonction acceptera les nombres octaux non valides et tentera toujours de les convertir. Cela peut conduire à un comportement très peu évident. À partir de Vista, les numéros non valides sont traités comme des noms de domaine et Windows tentera d'effectuer une recherche DNS pour ceux-ci. Ce qui est un comportement assez étrange aussi, mais cela ne causera au moins aucun problème. - Tonny
@tonny c'est parce que POSIX inet_addr () renvoie -1 pour les valeurs non valides, ce qui revient à 255. La nouvelle routine, mentionnée dans la page de manuel Linux, offre une meilleure gestion des erreurs. - cde
@cde je n'ai jamais pris la peine de creuser cela profondément dans la mécanique de inet_addr (). Je te prendrai au mot :-) - Tonny


Comme Courses de légèreté en orbite et d'autres ont souligné,

le INET(3) page de manuel décrit inet_addr et inet_aton, les fonctions standard utilisées pour convertir la "notation des nombres et des points IPv4 en forme binaire". Ça dit

... les composants de l'adresse en pointillés peuvent être spécifiés en décimal, octal (avec un 0 en tête), ou hexadécimal, avec un 0X en tête).

Donc techniquement, NON, une adresse IP avec des zéros non significatifs n'est pas (toujours) identique à une sans zéros. Dans votre cas cependant, 192.168.2.100 et 192.168.002.100 sont identiques, car 002 == 2.

Toute interface utilisateur nécessitant que chaque composant ait exactement trois caractères, avec des zéros non significatifs requis, est rompue.


12
2017-12-30 08:18



L'idée que des "zéros de tête" sont requis (sur certains équipements) ne semble pas être contestée; Sur quoi se base-t-il pour appeler cela "incorrect-requis" / "cassé"? Juste parce qu'il viole INET (3) / inet_addr / inet_aton? Les implémentations nécessitant de tels zéros utilisent probablement un autre code qui peut communiquer correctement, et donc ne pas être "cassé". (J'ai vu des imprimantes le faire.) Existe-t-il une base pour dire que la page de manuel INET (3) est plus "correcte" / une ressource plus fiable que d'autres documents officiels, tels que les RFC et autres cités par ce projet de document? - TOOGAM


Certaines implémentations considèrent que les octets avec des zéros en tête sont décimaux, alors que d'autres implémentations les considèrent comme octaux. Tant que l'octet est compris entre 0 et 7, cela ne fait aucune différence. Ainsi par exemple serait 192.168.002.100 être interprété comme 192.168.2.100 dans les deux implémentations.

Mais si vous deviez saisir une adresse comme 192.168.010.100 il pourrait être interprété comme soit 192.168.10.100 ou 192.168.8.100 en fonction de la mise en œuvre. Il n’est pas non plus improbable qu’il existe des implémentations, ce qui considérerait que les zéros de tête constituent une erreur de syntaxe. En outre, il existe des scénarios dans lesquels les logiciels peuvent insister sur le fait que vous devez utiliser la représentation canonique pour une raison ou une autre. Pour toutes ces raisons, je recommande d'éviter les zéros lorsque vous écrivez une adresse IP.

Si vous écrivez un logiciel qui doit analyser une adresse IP, je vous recommande d'accepter les zéros en tête, mais de générer un avertissement à un emplacement approprié lorsque cela se produit.

Légèrement liés, il existe des implémentations qui vous permettent d'avoir moins de quatre composants dans la notation en pointillés. Lorsqu'il y a moins de quatre composants, le dernier composant a plus de 8 bits et les composants antérieurs ont exactement 8 bits. Par exemple 192.168.612 serait en fait un moyen valable d'écrire 192.168.2.100. Mais encore une fois, cette notation n’est pas recommandée.


5
2017-12-30 18:54





Juste un petit conseil: Dans certains cas, il est important d'utiliser des préfixes nuls dans les adresses IP. Par exemple, Apache .htaccess deny rules.

Si vous utilisez quelque chose comme

deny from 11.22.33.22

Apache est tellement stupide qu'il bloquera également l'accès aux adresses IP suivantes:

111.22.33.22

11.22.33.221

211.22.33.221

et en général, toute adresse IP qui comprend 11.22.33.22

Donc, juste pour être sûr de ne pas bloquer les adresses IP que vous ne vouliez pas bloquer, vous devez utiliser:

deny from 011.022.033.022

pour vous assurer qu'Apache ne bloque l'accès qu'à partir de l'adresse IP 11.22.33.22.


0
2018-01-18 06:27



Intéressant. Pouvez-vous fournir une référence pour cela? - Scott
La référence est l'expérience personnelle et de nombreux essais et erreurs, après avoir trouvé de nombreux visiteurs bloqués à la suite de l'utilisation de zéros non significatifs. Un autre moyen d'éviter les mauvaises interdictions consiste à utiliser l'IP au format CIDR. Par exemple, 11.22.33.22/32 au lieu de 11.22.33.22 - Nick Gar


sois prudent avec ça. il DEVRAIT être le même mais c'est NE PAS!
Je ne pouvais pas trouver une explication à cela, mais je peux certainement dire que sur Windows et Linux, les adresses IP avec et sans zéros de tête ne sont PAS les mêmes! Peut-être que cela a à voir avec la conversion à partir d'autres formats tels que hex ou binaire.

d'après mon expérience avec Windows et Linux, ce n'est pas un outil dépendant, mais il dépend de ce qui semble être parce que je suis confronté à des problèmes tels que 10.08.03.100:

  • note: "10.08.0.1" et 10.09.0.1 sont introuvables
  • note: "10.010.0.1" est résolu en 10.8.0.1

linux / debian7 / 8: mêmes résultats avec l'outil "ping" et "snmpget"

user@test:~$ ping 10.7.0.1
PING 10.7.0.1 (10.7.0.1) 56(84) bytes of data.
^C
--- 10.7.0.1 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms

user@test:~$ ping 10.07.0.1
PING 10.07.0.1 (10.7.0.1) 56(84) bytes of data.
^C
--- 10.07.0.1 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms

user@test:~$ ping 10.8.0.1
PING 10.8.0.1 (10.8.0.1) 56(84) bytes of data.
^C
--- 10.8.0.1 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms

user@test:~$ ping 10.08.0.1
**ping: unknown host 10.08.0.1**
user@test:~$ ping 10.9.0.1
PING 10.9.0.1 (10.9.0.1) 56(84) bytes of data.
^C
--- 10.9.0.1 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms

user@test:~$ ping 10.09.0.1
ping: unknown host 10.09.0.1
user@test:~$ ping 10.10.0.1
PING 10.10.0.1 (10.10.0.1) 56(84) bytes of data.
^C
--- 10.10.0.1 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms

user@test:~$ ping 10.010.0.1
PING 10.010.0.1 (10.8.0.1) 56(84) bytes of data.
^C
--- 10.010.0.1 ping statistics ---
2 packets transmitted, 0 received, 100% packet loss, time 1001ms

windows7 / 8/10: mêmes résultats avec l'outil "ping" et "telnet"

(désolé, je n'ai pas de fenêtres en anglais sous la main, une erreur indique que l'hôte n'a pas pu être trouvé)

C:\Users\user>ping 10.7.0.1

Ping wird ausgeführt für 10.7.0.1 mit 32 Bytes Daten:
STRG-C
^C
C:\Users\user>ping 10.07.0.1

Ping wird ausgeführt für 10.7.0.1 mit 32 Bytes Daten:
STRG-C
^C
C:\Users\user>ping 10.8.0.1

Ping wird ausgeführt für 10.8.0.1 mit 32 Bytes Daten:
STRG-C
^C
C:\Users\user>ping 10.08.0.1
Ping-Anforderung konnte Host "10.08.0.1" nicht finden. Überprüfen Sie den Namen,

C:\Users\user>ping 10.9.0.1

Ping wird ausgeführt für 10.9.0.1 mit 32 Bytes Daten:
STRG-C
^C
C:\Users\user>ping 10.09.0.1
Ping-Anforderung konnte Host "10.09.0.1" nicht finden. Überprüfen Sie den Namen,

C:\Users\user>ping 10.10.0.1

Ping wird ausgeführt für 10.10.0.1 mit 32 Bytes Daten:
STRG-C
^C
C:\Users\user>ping 10.010.0.1

Ping wird ausgeführt für 10.8.0.1 mit 32 Bytes Daten:
STRG-C
^C

0
2017-07-15 15:30



Un zéro en tête indique souvent un octal. En effet, les octaux 010 sont décimaux 8 et 08 et 09 sont des nombres octaux invalides. Donc oui, la réponse (actuellement) acceptée par AthomSfere est fausse (ou du moins incomplète). Voir ses commentaires et quelques autres réponses. - Arjan
Ugh, cette manipulation de 10.010.0.1 est absolument horrible. Dans Microsoft Windows, le ping 10.070.0.1 est traité comme 10.56.0.1 et le 10.080.0.1 donne une erreur instantanée. "La requête Ping n'a pas pu trouver l'hôte 10.080.0.1. Veuillez vérifier le nom et réessayer." - TOOGAM
Oui, @TOOGAM, octal 070 est décimal 56. Et octal 080 n'est pas un nombre valide. - Arjan


Les deux adresses IP sont différentes.

Toutefois:

  • Les gens les considèrent généralement comme les mêmes.
  • Certains logiciels les considèrent comme identiques.
  • Certains logiciels, sur certaines plates-formes, les considéreront différents.

Si cela peut paraître déroutant, c’est parce qu’il n’existe pas de norme régissant la façon dont les adresses IP sont censées être écrites, donc différents programmeurs à différents moments de l’histoire et sur différentes plates-formes ont tous des idées différentes sur ce qu’il faut faire.

Les adresses IP sont en réalité binaires et les utilisateurs ont tendance à utiliser une notation décimale en pointillés pour représenter les adresses IP. Le logiciel peut accepter différentes bases numériques (c.-à-d. Décimales, octales, hexadécimales) et interpréter les choses de différentes manières en fonction de la manière dont vous l'écrivez. Comment vous écrivez peut dire au logiciel quelle base vous écrivez.

Je vous conseille: n'utilisez pas de zéros de tête si vous voulez utiliser la notation décimale en pointillés. Certains logiciels considèrent qu'un drapeau signifie que vous entrez un nombre octal. Si vous voulez entrer un nombre décimal, vous n'obtiendrez pas les résultats escomptés.

J'ai demandé à un question similaire et obtenu de bonnes réponses, donc si vous voulez lire les RFC, il y a de bonnes informations à ce sujet.


-4
2017-07-10 14:20