Проверка IP-адреса

Я занимаюсь рефакторингом своего кода и хотел использовать метод IPAddress.TryParse , чтобы проверить, является ли строка допустимым адресом IPv4 вместо использования регулярных выражений:

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

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

    return false;
}

Мой модульный тест теперь происходит сбой, поскольку эти входные значения возвращают true и анализируются на следующие объекты IPAddress :

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}

Имеет ли это смысл? Я вижу, что 0.0.0.0 технически является допустимым IPv4-адресом, даже если для пользователя нет смысла вводить его. А что насчет двух других? Почему они конвертируются так, как есть, и должен ли я рассматривать их как действительные, даже если это может быть непрозрачно для пользователя, который, возможно, просто забыл ввести точки ( 65536 вместо 6.5. 5.36 ).

Любая помощь приветствуется.

14
задан Community 23 May 2017 в 10:30
поделиться