Quel est le meilleur moyen de valider une Adresse IP?

J'ai une méthode pour valider un paramètre d'Adresse IP. Étant nouveau développement dans son ensemble, je voudrais savoir si il existe une meilleure façon de le faire.

///<summary>
///Check IP Address, will accept 0.0.0.0 as a valid IP
///</summary>
///<param name="strIP"></param>
///<returns></returns>
public Boolean CheckIPValid(String strIP)
{
    // Split string by ".", check that array length is 3
    char chrFullStop = '.';
    string[] arrOctets = strIP.Split(chrFullStop);
    if (arrOctets.Length != 4)
    {
        return false;
    }
    // Check each substring checking that the int value is less than 255 and that is char[] length is !> 2
    Int16 MAXVALUE = 255;
    Int32 temp; //Parse returns Int32
    foreach (String strOctet in arrOctets)
    {
        if (strOctet.Length > 3)
        {
            return false;
        }

        temp = int.Parse(strOctet);
        if (temp > MAXVALUE)
        {
            return false;
        }
    }
    return true;
}

Sa simple (j'ai pu le faire), mais il semble faire l'affaire.

  • Je ne veux pas que ce soit trop de discussion, ce qui n'est pas ce qui est DONC pour. Comment jamais, je ne veux post pour voir si j'ai une réponse intéressante.
  • Je n'avais aucune idée que IPAddress.Parse() en fait validé en tant que tel. J'ai juste pensé que ça a changé un 12 chiffre entier dans le format d'adresse IP. Vraiment utile que si elle ne le fait (même si ça me fait un peu stupide).
  • outre le "out of the box" réponses je voudrais changer arrOctets.Length != 4 à arrOctets.Length < 3 parce que si quelqu'un passait dans 123.123.123.123.123? ce n'est pas 4 et toujours pas valide v4 adresse.
  • Que l'adresse est valide, c'est à dire entre 1.0.0.0 et 254.254.254.254. L'adresse réseau est inclus bien sûr
  • parfait. Je ne l'avais pas vu, mais serait gâcher les choses devraient quelqu'un entrer 🙂
  • Yup. N'aimez-vous pas quand vous le faites travailler dur pour trouver le cadre déjà fait pour vous 😛
  • enfait, serait arrOctets == 3, le meilleur de tous. Il ne doit jamais être différent devrait-il?
  • Heureusement, il n'est pas arrivé beaucoup de choses encore, mais je suis sûr que dans le temps il sera. Je suis sûr qu'il ne cesse de changer 😛
  • mmm si vous modifiez ce qui serait, je pense que vous avez de l'envelopper le reste de votre fonction à l'intérieur que si. plutôt que de simplement retourner faux à ce point. si la longueur est de 3 ce faire, l'autre sage de sortie. Ou si c'est plus que trois à la sortie, l'autre sage de continuer.
  • Non, Length != 4 est le bon critère, il rejette à la fois trop et trop peu (moins de quatre champs sans doute sont alternes encodages, mais doit être rejetée, sauf si vous voulez vraiment de la souplesse). La longueur de la fente de sortie n'est PAS le nombre de séparateurs trouvé, de sorte que l'inégalité de comparaison contre 3 est faux.