web-dev-qa-db-fra.com

0.0.0.0 est-il une adresse IP valide?

0.0.0.0 est-il une adresse IP valide? Je veux que mon programme puisse le stocker comme indication qu'aucune adresse n'est utilisée, mais cela ne fonctionnera pas si elle est réellement valide.

53
Vishnuprakash

Il est valide dans la mesure où il contient quatre octets, chacun compris entre 0 et 255 inclus. Cependant, ce n'est pas utilisable comme une véritable adresse IP.

RFC17 (une) stipule que 0.0.0.0/8 (0.<anything>.<anything>.<anything>) est réservé comme adresse source uniquement. Vous pouvez vous retrouver dans une situation où il semble que vous ayez cette adresse, mais c'est normalement parce qu'aucune adresse ne vous a été attribuée (par DHCP, par exemple).

Voir aussi entrée Wikipedia sur IPv4 .


(une) Bien que ce RFC soit maintenant considéré comme obsolète, il est toujours correct en termes de comportement donné. Son remplacement, https://www.iana.org/assignments/iana-ipv4-special-registry/iana-ipv4-special-registry.xhtml , a toujours le même texte détaillant l'utilisation du 0.0 Adresse .0.0.

47
paxdiablo

Oui, c'est une adresse IP mais elle est réservée.

0.0.0.0/8 - Adresses dans ce bloc font référence aux hôtes sources sur "ce" réseau. L'adresse 0.0.0.0/32 peut être utilisée comme adresse source pour cet hôte sur ce réseau; d'autres adresses dans 0.0.0.0/8 peuvent être utilisées pour faire référence à des hôtes spécifiés sur ce réseau

7
Cristian Sanchez

Le 0.0.0.0 est utilisé pour lier toutes les interfaces IPv4. C'est donc une valeur spéciale comme 127.0.0.1.

7
Novikov

Regardons la question posée ici par le PO.

0.0.0.0 est-il une adresse IP valide?

Oui. C'est techniquement une adresse IP valide, et les autres réponses décrivent de nombreuses utilisations différentes (je ne vais pas republier wikipedia liens ici ... ou peut-être que je le suis).

En tant que tel, je pense que la réponse de paxdiablo ci-dessus est le plus correct, mais permet également de regarder le contexte de votre question.

Je veux que mon programme puisse le stocker comme une indication qu'aucune adresse n'est utilisée, mais cela ne fonctionnera pas si elle est réellement valide.

Cela dépend entièrement de votre cas d'utilisation. Étant donné qu'il s'agit d'un forum de programmeurs, examinons cette perspective.

Si votre logiciel stocke des adresses Internet réelles - emplacements des serveurs, visiteurs de votre site Web, sites de réplication/miroir ou de sauvegarde, serveurs de services Web ou de bases de données, etc. - alors cela sera parfaitement valable. Aucune machine sur Internet n'aura jamais cette adresse affectée, ni ne se résoudra jamais en une connexion valide.

Si, par contre, vous écrivez un micrologiciel de pare-feu ou de routeur, cette adresse prend alors une signification particulière; route par défaut, acceptez n'importe quelle source/destination IP, bloquez toutes les sources/destinations IP, le fourre-tout, etc., comme indiqué par tout le monde. Cependant, permettez-moi de souligner que si vous codez à ce niveau, vous devez avoir une assez bonne compréhension des protocoles réseau afin de ne pas avoir à poser cette question en premier lieu.

Je vais donc supposer que la plupart des personnes qui consultent cette question entrent dans la première catégorie et suggèrent que cela est un moyen parfaitement valide de stocker une adresse IP nulle, vide ou manquante , s'il existe une raison pour laquelle une valeur réelle null ne peut pas être utilisée. Même si vous négligez la vérification de validation et que votre logiciel essaie de se connecter à cette adresse IP, il ne pourra tout simplement pas établir de connexion.

6
Hearth

Il est réservé comme l'adresse route par défaut .

Il est courant de le voir via ipconfig lorsqu'aucune adresse ne vous a été attribuée.

3
Rob

Comme d'autres réponses l'ont couvert, 0.0.0.0 est une adresse IP légale et valide à certaines fins.

Si toutes les valeurs d'une plage sont des valeurs légales, tous les éléments d'indicateur que vous souhaitez définir doivent provenir d'ailleurs. Sinon, vous surchargez une valeur légale avec la signification d'un indicateur, et lorsque vous utilisez la valeur surchargée, il ne sera pas possible à 100% de déterminer si la valeur légale ou la signification de l'indicateur était prévue. Cela entraînera des bogues qui doivent être résolus avec un re-facteur qui peut être une entreprise coûteuse.

La surcharge des valeurs légales se produit tout le temps, les adresses IP et MAC (oui, 00: 00: 00: 00: 00: 00 sont légales et attribuées) sont parmi les victimes les plus courantes.

Par coïncidence, je travaille sur un système (non basé sur Ethernet/IP) maintenant où la longueur d'une trame est plafonnée à environ 40 octets. Puisqu'un octet peut représenter des longueurs de 0 à 255 octets, et la longueur maximale est de 40 octets, je peux utiliser certaines des valeurs non légales aka non utilisées (252 à 255) pour représenter les éléments d'indicateur. Ces drapeaux intrabande sont corrects car il n'y a pas de surcharge.

1
studog

Vous pouvez l'utiliser dans votre application pour indiquer qu'elle n'a pas d'adresse IP, Microsoft utilise également 0.0.0.0 lorsque la machine n'a pas d'adresse IP.

les scénarios "valides" évoqués ci-dessus dépendent des scénarios spécifiques où ils n'ont rien à voir avec votre application.

1
Martin

à toutes fins utiles, oui. Chacun des quatre nombres séparés par la période a une valeur allant de 0 à 255, donc 0.0.0.0 est techniquement valide.

Je ne pense pas qu'il y ait cependant quelqu'un dans le monde qui possède cette adresse IP.

EDIT: d'accord, il est réservé pour la route par défaut, mais il est toujours valide.

0
Alexander Rafferty

Faire une requête Network Whois peut également produire une sortie très utile.
Exemple:
http://whois.arin.net/rest/nets;q=0.0.0.0?showDetails=true

Commentaire: L'adresse 0.0.0.0 ne peut être utilisée comme adresse d'un paquet sortant que lorsqu'un ordinateur apprend quelle adresse IP il doit utiliser. Il n'est jamais utilisé comme adresse de destination. Adresses commençant par "0". sont parfois utilisés pour les diffusions vers des appareils directement connectés.

0
Peter B

bien sûr que ça l'est. il ne sera cependant pas valable pour un seul hôte sur un réseau. il est dans la plage de diffusion du réseau local. lire ici: http://tools.ietf.org/html/rfc17

0
The Surrican