web-dev-qa-db-fra.com

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

J'ai un système de sécurité et le paramètre réseau ne permet qu'une adresse IP à trois chiffres. Je ne peux pas le définir sur 192.168.2.100, je dois plutôt utiliser 192.168.002.100.

Ces deux adresses IP sont-elles différentes? Dois-je configurer le réseau local de mon routeur sur 192.168.xxx.xxx pour que cela fonctionne correctement? Je ne trouve aucune information solide à ce sujet.

88
Brock Vond

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 à 3 chiffres commençant par un zéro (ou un numéro à deux chiffres commençant par zéro, merci @ Dietrich-Epp), alors ping supposera que les nombres sont octaux.

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),
101
Greenstone Walker

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, n’est que la notation amicale point-décimal de la valeur point-binaire 11000000.10101000.00000000.00000001.

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

65
Austin T French

Cela dépend des outils ou 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 une routine POSIX compatibleinet_addr()/ pour l'analyse d'adresses.

De nombreux programmes TCP/IP tels que Ping et FTP utilisent la fonction sockets inet_addr () pour convertir les chaînes d'adresses IP en adresses de 4 octets. Cette fonction accepte une adresse IP en notation décimale, octale et hexadécimale standard.
Microsoft KB115388 Ping et FTP Résoudre l'adresse IP avec le zéro non linéaire en octal

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

Dans tous les formulaires ci-dessus, les composants de l'adresse en pointillé peuvent être spécifiés en décimal, en octal (avec un 0 au début) ou en hexadécimal avec un 0 au début. Les adresses sous l'une de ces formes sont collectivement appelées notation IPv4 nombres-et-points. La forme qui utilise exactement quatre nombres décimaux est appelée notation décimale pointée IPv4 (ou parfois: notation quadribande 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 ceci n'est pas universel et vous devez veiller à ce que la bonne adresse IP soit entrée.

Bien entendu, seuls les nombres valides pour chaque type fonctionneront. Les nombres octaux, hexadécimaux ou décimaux en dehors de la plage échoueront également ou entraîneront des problèmes. Octal 088, Hex 0xGG ou Decimal 280 sont des exemples non valides.

37
cde

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

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

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

Donc techniquement,NO, une adresse IP avec des zéros non significatifs n'est pas (toujours) la même que celle sans zéros non significatifs. Cependant, dans votre cas, 192.168.2.100 et 192.168.002.100 sont identiques, car 002 == 2.

Toute interface utilisateur exigeant que chaque composant ait exactement trois caractères, avec des zéros non requis de manière incorrecte, est cassée.

13
Jonathon Reinhart

Certaines implémentations considèrent les octets avec des zéros non significatifs comme des décimales, tandis que d'autres implémentent les octaux. Tant que l'octet est compris entre 0 et 7, cela ne fait aucune différence. Ainsi, par exemple, 192.168.002.100 serait interprété comme 192.168.2.100 dans les deux implémentations.

Mais si vous deviez entrer une adresse sous la forme 192.168.010.100, elle pourrait être interprétée comme étant 192.168.10.100 ou 192.168.8.100, selon l'implémentation. Il n’est également pas improbable que des implémentations existent, ce qui considérerait les zéros comme une erreur de syntaxe. De plus, il existe des scénarios dans lesquels le logiciel peut exiger que vous utilisiez la représentation canonique pour une raison ou une autre. Pour toutes ces raisons, je vous 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 recommanderais d’accepter les zéros non significatifs, mais d’envoyer un avertissement à un emplacement approprié lorsque cela se produit.

Légèrement liées, certaines implémentations permettent d’avoir moins de quatre composants dans la notation en pointillé. Lorsqu'il y a moins de quatre composants, le dernier composant a plus de 8 bits et les composants précédents ont exactement 8 bits. Par exemple, 192.168.612 serait en fait un moyen valide d’écrire 192.168.2.100. Mais encore une fois, l’utilisation de cette notation n’est pas recommandée.

6
kasperd

soyez prudent avec cela. ilDEVRAITêtre le même mais c'estPAS!
Je ne trouvais pas d'explication à cela, mais je peux dire que sur Windows et Linux, les adresses IP avec et sans zéros au début ne sont pas identiques! peut-être que cela a à voir avec la conversion d'autres formats comme hex ou binaire.

d'après mon expérience avec Windows et Linux, il n'est pas dépendant de l'outil mais dépend de l'OSI car il semble que je rencontre un problème d'utilisation d'ips comme 10.08.03.100:

  • remarque: "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être anglaise 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
vchrizz

Juste un petit conseil: dans certains cas, il est important d’utiliser zéro préfixe dans les adresses IP. Un exemple, est Apache .htaccess nier les règles.

Si vous utilisez quelque chose comme

deny from 11.22.33.22

Apache est si stupide que l'accès aux adresses IP suivantes sera également bloqué:

111.22.33.22

11.22.33.221

211.22.33.221

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

Donc, pour vous assurer de ne bloquer aucune adresse IP que vous ne vouliez pas bloquer, vous devez utiliser:

deny from 011.022.033.022

pour être sûr qu'Apache ne bloquera l'accès qu'à partir de l'adresse IP 11.22.33.22.

0
Nick Gar