13 votes

Quelle est la meilleure façon de déterminer si un nom de domaine est valide dans un fichier "hosts" ?

Les fenêtres Fichier des hôtes permet d'associer une IP à un nom d'hôte qui offre beaucoup plus de liberté qu'un nom de domaine Internet normal. J'aimerais créer une fonction qui détermine si un nom donné est un nom de domaine de fichier "hôte" valide.

Sur la base de cette réponse et l'expérimentation de ce qui fonctionne et de ce qui ne fonctionne pas, j'en suis arrivé à 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;
}

Elle présente également l'avantage de fonctionner avec les noms Unicode (alors qu'une expression rationnelle de base échouerait).

Existe-t-il un moyen plus efficace/élégant de procéder ?

MISE À JOUR : Comme suggéré par Projet de loi , le Uri.CheckHostName fait presque ce que je veux, mais elle ne permet pas d'utiliser des noms d'hôtes comme "-test" que Windows autorise dans un fichier "hosts". Je ferais un cas spécial pour la partie "-", mais je crains qu'il y ait d'autres cas spéciaux.

44voto

Bill Points 1261

Qu'en est-il de la System.Uri.CheckHostName() méthode ?

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

Pourquoi faire le travail soi-même ?

0voto

Sheo Narayan Points 31

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

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

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

Remerciements

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X