J'ai recherché SO pour de l'aide mais je n'ai pas pu trouver de réponse à ma question.Conversion de la notation "/" du masque de sous-réseau en norme Cisco 0.0.0.0
Situation: J'ai besoin de convertir une notation de masque de sous-réseau "/ NN" (pensez IPTABLES) à une notation Cisco 0.0.0.0. NN sont le nombre de "1" dans le sous-masque, de l'octet le plus bas à l'octet le plus haut. Chaque octet est un entier de 8 bits.
solution possible:
plus d'un réseau de 32 "0" et remplir les derniers chiffres NN "1", puis en groupe de 4 octets et convertir en int ... a/23 masque devrait être comme 0,0 .1.255.
Ma question est de savoir comment le faire en .NET ... je n'ai jamais utilisé la manipulation binaire et la conversion.
Pouvez-vous m'aider avec cette solution?
MISE À JOUR - Stephen a répondu correctement!
Voici le code à Ported
.NET if (p.LastIndexOf("/") < 0) return p;
int mask= Convert.ToInt32("0"+p.Substring(p.LastIndexOf("/")+1,2));
int zeroBits = 32 - mask; // the number of zero bits
uint result = uint.MaxValue; // all ones
// Shift "cidr" and subtract one to create "cidr" one bits;
// then move them left the number of zero bits.
result &= (uint)((((ulong)0x1 << mascara) - 1) << zeroBits);
result = ~result;
// Note that the result is in host order, so we'd have to convert
// like this before passing to an IPAddress constructor
result = (uint)IPAddress.HostToNetworkOrder((int)result);
string convertedMask = new IPAddress(result).ToString();
Merci d'avoir répondu: D Je vais essayer et poster les commentaires, mais avant j'ai une question. Le résultat sera le "255.255" ou le "0.0.1.255" comme le cisco? Cordialement! – jaderanderson
Ceci est converti en un masque de sous-réseau standard "255.255.128.0". Si vous avez besoin d'un masque "générique", alors vous pouvez prendre le bitwise ('~') du résultat avant d'appeler 'HostToNetworkOrder', et cela vous donnera un résultat comme" 0.0.1.255 ". –
Merci l'homme, mettra à jour le code avec la réponse! Ça marche! – jaderanderson