Melhor maneira de determinar se um nome de domínio seria uma válida em um arquivo “hosts”?

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

Pergunta

A do Windows Hosts arquivo permite associar um IP a um nome de host que tem muito mais liberdade do que um nome de domínio Internet normal. Eu gostaria de criar uma função que determina se um determinado nome seria um nome de domínio de arquivo "host" válido.

Com base este responder e experimentação do que funciona e não faz, eu vim com essa função:

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;
}

Ele também tem a vantagem de que ele deve trabalhar com nomes Unicode (onde um regex básica falharia).

Existe uma maneira melhor / mais elegante de fazer isso?

Atualizar : Como sugerido por Bill , a método Uri.CheckHostName quase faz o que eu quero, mas ele não permite para o anfitrião nomes como "-teste" que o Windows permite que em um arquivo "hosts". Eu faria caso especial do "-" parte, mas eu estou preocupado há casos mais especiais.

Foi útil?

Solução

Como sobre o Sistema. Uri.CheckHostName () método?

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

Por que fazer o trabalho sozinho?

Outras dicas

Estes métodos não são confiáveis ??como você obter alguma resposta, mesmo que o nome de domínio é falso como "fasdfasdfasd.com".

A melhor maneira é enviar um WebResponse e aguardar a resposta do domínio. Aqui está o código e explicações sobre esse processo completo (código longo trecho por isso não copiar e colar aqui).

http://www.dotnetfunda.com/ artigos / show / 1072 / validando-domain-name-in-aspnet

Graças

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top