代码之家  ›  专栏  ›  技术社区  ›  Jeff Moser

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

  •  13
  • Jeff Moser  · 技术社区  · 15 年前

    窗户 Hosts file host name

    基于 this answer 通过实验,我发现了这个函数:

    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”之类的主机名。我会把“-”部分作为特例,但我担心会有更多的特例。

    2 回复  |  直到 7 年前
        1
  •  38
  •   reformed Ezequiel García    8 年前

    这个怎么样 System.Uri.CheckHostName() 方法

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

        2
  •  0
  •   Community Ian Goodfellow    4 年前

    这些方法是不可靠的,因为即使域名是假的,比如“fasdfasd.com”,您也会得到一些响应。

    最好的方法是发送WebResponse并等待来自域的响应。下面是这个过程的完整代码和解释(代码段很长,所以不要在这里复制粘贴)。

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

    推荐文章