La mejor manera de determinar si un nombre de dominio sería una válida en un archivo “hosts”?

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

Pregunta

le permite asociar una dirección IP a un nombre de host que tiene mucha más libertad que un nombre de dominio de Internet normal. Me gustaría crear una función que determina si un nombre dado sería un nombre de dominio archivo "host" válida.

Basado en este responder y experimentación de lo que funciona y no lo hace, se me ocurrió con esta función:

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

También tiene la ventaja de que debe trabajar con nombres Unicode (donde una expresión regular básica fallaría).

¿Hay una manera mejor / más elegante de hacer esto?

Actualizar : Como sugiere Bill , método Uri.CheckHostName casi hace lo que yo quiero, pero no permite la acogida nombres como "test" que Windows permite en un archivo "hosts". Lo haría caso especial del "-" parte, pero que a mí respecta, hay casos más especiales.

¿Fue útil?

Solución

¿Por qué el sistema rel="noreferrer"> href="https://msdn.microsoft.com/en-us/library/system.uri.checkhostname(v=vs.110).aspx" método?

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

¿Por qué el mismo trabajo?

Otros consejos

Estos métodos no son fiables a medida que algún tipo de respuesta, incluso si el nombre de dominio es falsa como "fasdfasdfasd.com".

La mejor manera es enviar un WebResponse y esperar la respuesta del dominio. Aquí está el código completo y explicaciones de este proceso (fragmento de código largo para no copiar y pegar aquí).

http://www.dotnetfunda.com/ artículos / mostrar / 1072 / validación de nombre-dominio-en-Red PEA-

Gracias

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top