Déterminer si les deux adresses IP sont sur le même sous - réseau est-il avant ou après 0s obtenir chuté à partir de l'adresse IP?
Je comprends, si les deux adresses IP sont ET souhaitez avec un masque de sous-réseau si le résultat est le même alors qu'ils sont sur le même réseau. Si le résultat est différent alors qu'ils sont sur des réseaux différents. Ma question est, quand ils reçoivent une adresse IP omettant certains de 0 où les extra 0s placés?
Par exemple, si le masque de sous-réseau est de 255 . 128 . 0 . 0 , et vous avez IP 126 . 1 . 0 . 10 et IP 126 . 127 . 0 . 1 si vous venez de l'aveugle ET de l'IPs avec le masque de sous-réseau, vous obtenez des résultats différents, même s'ils sont sur le même réseau.
Ne 126.1.0.10 devenir 126.100.000.100 ou 126.001.000.100?
EDIT après lecture des réponses:
255128000000 ET 126001000010 = 1085496376*32* mais 255128000000 ET 126127000001 = 1085276323*84*
Ai-je raté quelque chose?
- Vous ne devriez pas obtenir des résultats différents après ANDing ces adresses avec le masque de sous-réseau. Quels résultats obtenez-vous? Il serait mieux si vous voulez montrer un peu de code.
Vous devez vous connecter pour publier un commentaire.
Les adresses IPv4 sont composées de quatre ordinaire décimal numéros (de chaque côté dans un octet) séparés par des points.
L'ordinaire nombre décimal 1 est "l'un", qui peut aussi être écrit 001. Toutefois 100 est un différents nombre, à savoir "une centaine".
La ET le fonctionnement est toujours un au niveau du bit ET, donc, de le comprendre, vous devez d'abord voir comment la décimale de l'adresse et le masque de réseau correspond à une crue binaire de 32 bits de l'adresse:
Donc 126.127.0.1 avec le masque de réseau 255.128.0.0 est dans le sous-réseau 126.0.0.0/9
Dans le logiciel, en général magasins adresses IPv4 dans une seule variable de 32 bits -- donc 126.127.0.1 est 01111110011111110000000000000001 binaire (qui encode également 2122252289 décimale, sauf que jamais personne ne s'en soucie ce que la valeur décimale d'un 32 bits de l'adresse IP de l'est), et il est converti en décimal uniquement lorsqu'il doit être montré à des utilisateurs humains. Cette représentation est ce glglgl décrit comme la multiplication par 256 plusieurs fois.
Si vous aussi vous avez le masque de réseau dans une variable de 32 bits (11111111100000000000000000000000 binaire ou 4286578688 décimal), vous pouvez (ET dans une seule instruction machine pour obtenir l'adresse réseau 01111110000000000000000000000000.
Vous êtes complètement à côté de quelque chose: Vous n'avez pas seulement concat vos chiffres ensemble, parce que ET fonctionne sur le niveau binaire.
Donc, soit vous traitez les adresses IPv4 octet-sage, ou de vous transformer en un nombre décimal, mais pas avec un facteur 1000, mais avec un facteur de 256.
C'est-à-dire, au lieu de faire
que vous devriez faire
. Si vous l'appliquer aux autres numéros, vous devriez réussir.
Sinon, vous pouvez ET, ensemble, les 4 numéros séparément, de sorte
De sorte que vous obtenez
126.0.0.0
pour les deux, faisant entre eux appartiennent à la même sous-réseau.Malgré le fait qu'il est plutôt étrange question, je vais essayer de répondre à votre requête spécifique:
Le nombre de '1' dans le second octet est vraiment un numéro 1, et par conséquent, il s '001', pas '100'.
Cela dit, votre exemple devrait ont travaillé, donc je pense qu'il y est quelque chose de mal avec votre mise en œuvre. Vous ne devriez pas avoir à vous soucier de remplissage ou de quoi que ce soit. Ce sont des chiffres, et au niveau du bit ET, il faut "juste travail".
Vous voudrez peut-être fournir plus de détails sur ce qui ne va pas.