Лучший способ определить, будет ли доменное имя действительным в файле «hosts»?

StackOverflow https://stackoverflow.com/questions/967516

Вопрос

Окна Файл хостов позволяет связать IP-адрес с имя хоста оно имеет гораздо большую свободу, чем обычное доменное имя Интернета.Я хотел бы создать функцию, которая определяет, будет ли данное имя действительным доменным именем файла «хост».

На основе этот ответ и экспериментируя с тем, что работает, а что нет, я придумал эту функцию:

private static bool IsValidDomainName(string domain)
{
    if (String.IsNullOrEmpty(domain) || domain.Length > 255)
    {
        return false;
    }

    Uri uri;

    if (!Uri.TryCreate("http://" + domain, UriKind.Absolute, out uri))
    {
        return false;
    }

    if (!String.Equals(uri.Host, domain, StringComparison.OrdinalIgnoreCase) || !uri.IsWellFormedOriginalString())
    {
        return false;
    }

    foreach (string part in uri.Host.Split('.'))
    {
        if (part.Length > 63)
        {
            return false;
        }
    }

    return true;
}

Преимущество этого метода также состоит в том, что он должен работать с именами в Юникоде (где базовое регулярное выражение не работает).

Есть ли лучший/более элегантный способ сделать это?

ОБНОВЛЯТЬ:Как предложил Счет, Uri.CheckHostName Метод почти делает то, что я хочу, но он не позволяет использовать имена хостов типа «-test», которые Windows допускает в файле «hosts».Я бы выделил часть «-», но меня беспокоит, что есть и другие особые случаи.

Это было полезно?

Решение

Как насчет System.Uri.CheckHostName() метод?

private static bool IsValidDomainName(string name)
{
    return Uri.CheckHostName(name) != UriHostNameType.Unknown;
}

Зачем работать самому?

Другие советы

Эти методы ненадежны, поскольку вы получите ответ, даже если доменное имя поддельное, например «fasdfasdfasd.com».

Лучший способ — отправить WebResponse и дождаться ответа от домена.Вот полный код и объяснения этого процесса (длинный фрагмент кода, поэтому не копируйте сюда).

http://www.dotnetfunda.com/articles/show/1072/validating-domain-name-in-aspnet

Спасибо

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top