La meilleure façon de déterminer si un nom de domaine serait valide dans un fichier « hosts »?

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

Question

Les fenêtres fichier Hosts vous permet d'associer une adresse IP à un nom d'hôte qui a beaucoup plus de liberté que d'un nom de domaine Internet normal. Je voudrais créer une fonction qui détermine si un nom donné serait un nom de domaine de fichier « hôte » valide.

D'après ce répondre et l'expérimentation de ce qui fonctionne et ne fonctionne pas, je suis venu avec cette fonction:

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

Il a aussi l'avantage qu'il devrait fonctionner avec des noms Unicode (où une expression régulière de base échouerait).

Y at-il une meilleure / façon de faire plus élégant cela?

UPDATE : Comme suggéré par Bill ,

Était-ce utile?

La solution

Qu'en est-. Uri.CheckHostName () méthode?

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

Pourquoi le travail vous-même?

Autres conseils

Ces méthodes ne sont pas fiables que vous obtenez une réponse, même si le nom de domaine est faux comme « fasdfasdfasd.com ».

La meilleure façon est d'envoyer un WebResponse et d'attendre la réponse du domaine. Voici le code complet et des explications de ce processus (à long extrait de code afin de ne pas copier-coller ici).

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

Merci

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top