Validation de l'adresse IP

Je suis refactoring mon code et je voulais utiliser le IPAddress.TryParse méthode pour valider si une chaîne est valide adresse IPv4 au lieu d'utiliser des expressions régulières:

public static bool IsIPv4(string value)
{
    IPAddress address;

    if (IPAddress.TryParse(value, out address))
    {
        if (address.AddressFamily == AddressFamily.InterNetwork)
        {
            return true;
        }
    }

    return false;
}

Mon unité de test est maintenant à défaut parce que ces valeurs d'entrée de retour true et obtenir analysée à la suite de IPAddress objets:

value = "0.0.0.0"      ->  address = {0.0.0.0}
value = "255.255.255"  ->  address = {255.255.0.255}
value = "65536"        ->  address = {0.1.0.0}

Cela fait-il sens? Je vois que 0.0.0.0 est techniquement valide l'adresse IPv4, même si elle n'a pas de sens pour l'utilisateur de saisir que. Concernant les deux autres? Pourquoi sont-ils convertis dans la façon dont ils sont et dois-je les traiter comme valide, même si il pourrait ne pas être transparent pour l'utilisateur, qui peut-être juste oublié de saisir les périodes (65536 au lieu de 6.5.5.36).

Toute aide est le plus apprécié.

La dernière est une conversion de base-256 nombre, qui est une représentation valide de l'adresse ip. Il est connu url cacher régime où vous utilisez ce nombre, quelque chose comme http://65536.

OriginalL'auteur Martin Buberl | 2011-02-23