Le meilleur moyen de déterminer si un nom de domaine serait valide dans un fichier «hôtes»?

Le fichier Hosts Windows vous permet d’associer une adresse IP à un nom d’hôte offrant une liberté bien plus grande qu’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.

Sur la base de cette réponse et de l’expérimentation de ce qui fonctionne et ne fonctionne pas, j’ai créé cette fonction:

private static bool IsValidDomainName(ssortingng domain) { if (Ssortingng.IsNullOrEmpty(domain) || domain.Length > 255) { return false; } Uri uri; if (!Uri.TryCreate("http://" + domain, UriKind.Absolute, out uri)) { return false; } if (!Ssortingng.Equals(uri.Host, domain, SsortingngComparison.OrdinalIgnoreCase) || !uri.IsWellFormedOriginalSsortingng()) { return false; } foreach (ssortingng part in uri.Host.Split('.')) { if (part.Length > 63) { return false; } } return true; } 

Il présente également l’avantage de fonctionner avec des noms Unicode (où une expression rationnelle de base échouerait).

Y a-t-il un moyen meilleur / plus élégant de faire cela?

UPDATE : Comme suggéré par Bill , la méthode Uri.CheckHostName fait presque ce que je veux, mais elle n’autorise pas les noms d’hôte tels que “-test” que Windows autorise dans un fichier “hôtes”. Je voudrais cas particulier la partie “-“, mais je suis préoccupé, il y a plus de cas spéciaux.

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

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

Pourquoi le travail vous-même?

Ces méthodes ne sont pas fiables car vous obtenez une réponse même si le nom de domaine est faux, tel que “fasdfasdfasd.com”.

Le meilleur moyen consiste à envoyer une réponse Web et à attendre la réponse du domaine. Voici le code complet et les explications de ce processus (extrait de code long, donc ne pas copier-coller ici).

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

Merci