2009-09-22 5 views
0

Je dois calculer un masque de réseau et un addr de sous-réseau en utilisant l'adresse de diffusion et l'adresse de l'hôte de ce sous-réseau. Je dois utiliser uniquement des opérations au niveau du bit et ne pas comparer la représentation sous forme de chaîne, les outils sysadmin et ainsi de suite.Calculer le masque de réseau et l'adresse de sous-réseau à partir de la diffusion et de l'adresse dans le sous-réseau

J'ai quelques formules pour calculer des adresses. Mais je ne sais pas comment l'utiliser avec mes données source.

  • ^- est
  • bitwise
  • xor ~ - négation
  • & et | conjonction et disjonction respectivement
  • Formules:
  • ip | (~ m) = b
  • ip & m = n
  • n | (~ M) = b
  • n^b = ~ m

où n - est l'adresse de sous-réseau, b - adresse de diffusion IP - adresse hôte du sous-réseau et m - est un masque net.

(Par exemple, j'ai 192.168.1.160 - adr de sous-réseau, 192.168.1.191 - diffusion et/27 masque de réseau (255.255.255.224))

+0

C'est moi. si c'est intéressant pour quelqu'un :) – Golovko

+0

Je doute fortement qu'il puisse éventuellement faire ses devoirs. Les problèmes de devoirs ont normalement des solutions. –

Répondre

2

Impossible. Supposons que la diffusion est 192.168.1.255 et l'adresse est 192.168.1.251. Il peut être 192.168.1.0/24, 192.168.1.128/25, 192.168.1.128/26, etc.

+0

Pour commencer, je veux avoir une partie égale de la représentation binaire ip addr et broadcast. Par exemple. : 1100000010101000110111111 (diffusion) 1100000010101000110101100 (ip) ont une partie égale '11000000101010001101'. avec des zéros de fin c'est l'adresse de sous-réseau. De plus, je peux calculer les premiers bits du masque de réseau en inversant le résultat de (ip xor broadcast), mais les derniers bits contiennent des valeurs de corbeille. – Golovko

+1

Comme je l'ai montré dans mon exemple - la partie qui se chevauche de la diffusion et l'adresse IP réelle n'est pas nécessairement le réseau parce que les bits les plus significatifs de la partie hôte de l'adresse IP peuvent être 1s. –

0

réponse de pirate à peu près couvre, sauf que si vous aviez une condition supplémentaire telle que « pour le plus long/netmask le plus court possible ». Ou, si en fait la question vous demande d'afficher toutes les réponses possibles.

Les opérations que vous avez spécifiées sont un peu limitées si vous souhaitez créer une solution de boucle. Vous voudriez aussi des opérations de bitshift. Sinon, vous pouvez exécuter jusqu'à 32 tests distincts, un pour chacun des masques de réseau possibles. Cet extrait montre ce que je veux dire, en supposant que vous voulez imprimer toutes les solutions.

... 
m = 255.0.0.0; 
if ((b & m) == (ip & m)) 
{ 
    n = b & m; 
    // Print out b, ip, n and m 
} 
m = 255.128.0.0; 
... 

Si vous voulez imprimer les plus courtes/longues réponses, vous devrez ajouter des variables pour stocker meilleure réponse et/ou des drapeaux pour indiquer si oui ou non une réponse a été trouvée. Par ailleurs, dans la réponse de hacker, je pense que le troisième exemple présenté devrait être 192.168.1.192/26, pas 192.168.1.128/26. Parce que le quatrième octet de l'adresse est tous 1, la partie réseau de l'adresse doit avoir tous les 1 dans le quatrième octet aussi.

Questions connexes