确定域名在“hosts”文件中是否有效的最佳方法是什么?

Windows Hosts文件允许您将IP与主机名相关联,该主机名具有比普通Internet域名更大的自由度。 我想创建一个函数来确定给定的名称是否是有效的“主机”文件域名。

根据这个有效和无效的答案和实验,我想出了这个function:

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

它还有一个好处,它应该使用Unicode名称(基本正则表达式失败)。

有没有更好/更优雅的方式来做到这一点?

更新 :正如Bill所建议的那样, Uri.CheckHostName方法几乎可以满足我的需求,但它不允许Windows允许在“hosts”文件中使用“-test”等主机名。 我会特别注意“ – ”部分,但我担心会有更多特殊情况。

System.Uri.CheckHostName()方法怎么样?

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

为什么自己工作?

即使域名是假的,如“fasdfasdfasd.com”,这些方法也不可靠。

最好的方法是发送WebResponse并等待域的响应。 以下是此过程的完整代码和说明(长代码片段,因此不要复制粘贴)。

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

谢谢