public ipv4 AdresseReseau(ipv4 unMasque) // Méthode à appliquer à une adresse IP { ipv4 adrReseau = new ipv4(); Byte octet1 = (Byte)(unMasque.GetOctet1() & _octet1); Byte octet2 = (Byte)(unMasque.GetOctet2() & _octet2); Byte octet3 = (Byte)(unMasque.GetOctet3() & _octet3); Byte octet4 = (Byte)(unMasque.GetOctet4() & _octet4); adrReseau.SetOctet1(octet1); adrReseau.SetOctet2(octet2); adrReseau.SetOctet3(octet3); adrReseau.SetOctet4(octet4); adrReseau.VersBinaire(); unMasque.DonneCIDR(); adrReseau.SetCIDR(unMasque.GetCIDR()); return(adrReseau); }
static private ipv4 SaisieMasque() { String saisie; String[] abcd; String elementA, elementB, elementC, elementD; String[] separateur = new string[] { "." }; ipv4 MasqueSaisi = new ipv4(); Byte unCIDR; Boolean formatValide; Boolean TypeEstCIDR = false; do // Cette boucle fait saisir à l'utilisateur un masque dans un format valide (CIDR ou décimal pointé) { formatValide = true; Console.Write("Masque / CIDR :\t\t\t"); saisie = SaisieEnVert(); int index = saisie.IndexOf('/'); if (index == 0) { saisie = saisie.Substring(1); } if (Byte.TryParse(saisie, out unCIDR) && unCIDR < 33) // L'utilisateur saisit directement un CIDR (nombre compris entre 0 et 32) { TypeEstCIDR = true; } else // L'utilisateur rentre un masque en notation décimale pointée... ou tout autre chose { try { abcd = saisie.Split(separateur, 4, StringSplitOptions.None); elementA = abcd[0]; elementB = abcd[1]; elementC = abcd[2]; elementD = abcd[3]; MasqueSaisi = new ipv4(Byte.Parse(elementA), Byte.Parse(elementB), Byte.Parse(elementC), Byte.Parse(elementD)); } catch (FormatException) { formatValide = false; } catch (IndexOutOfRangeException) { formatValide = false; } catch (OverflowException) { formatValide = false; } finally { if (formatValide) { Int32 resteOctetA, resteOctetB, resteOctetC, resteOctetD; resteOctetA = 256 - MasqueSaisi.GetOctet1(); resteOctetB = 256 - MasqueSaisi.GetOctet2(); resteOctetC = 256 - MasqueSaisi.GetOctet3(); resteOctetD = 256 - MasqueSaisi.GetOctet4(); if (!(EstPuissanceDeDeux(resteOctetA) && EstPuissanceDeDeux(resteOctetB) && EstPuissanceDeDeux(resteOctetC) && EstPuissanceDeDeux(resteOctetD))) { formatValide = false; } } } } if (TypeEstCIDR) // Si l'utilisateur a rentré un CIDR { StringBuilder unMasqueBinaire = new StringBuilder(); for (Byte i = 0; i < 32; i++) { if (i != 0 && i != 31 && (i + 1) % 8 == 0) { if (i < unCIDR) { unMasqueBinaire.Append("1"); unMasqueBinaire.Append("."); } else { unMasqueBinaire.Append("0"); unMasqueBinaire.Append("."); } } else { if (i < unCIDR) { unMasqueBinaire.Append("1"); } else { unMasqueBinaire.Append("0"); } } } abcd = unMasqueBinaire.ToString().Split(separateur, 8, StringSplitOptions.None); elementA = Convert.ToByte(abcd[0], 2).ToString(); elementB = Convert.ToByte(abcd[1], 2).ToString(); elementC = Convert.ToByte(abcd[2], 2).ToString(); elementD = Convert.ToByte(abcd[3], 2).ToString(); MasqueSaisi = new ipv4(Byte.Parse(elementA), Byte.Parse(elementB), Byte.Parse(elementC), Byte.Parse(elementD)); } if (!formatValide) { SaisieInvalide(); } } while (!formatValide); return(MasqueSaisi); }