【发布时间】:2019-02-15 19:04:34
【问题描述】:
我正在使用 C# 表单,其中用户提供两个主机的 FQDN,此信息稍后用于安装一些仅在两个 FQDN 位于同一域中时才有效的功能。我最初将两个主机名和一个域名放在不同的字段中,但这让用户感到困惑。基本上,我想检测这些 FQDN 字段中何时提供了不同的域。例如-
有效输入:
host1.domain1.example
host2.domain1.example
输入无效:
host1.domain1.example
host2.domain2.example
我想检测无效输入,但它比我想象的要复杂。
【问题讨论】:
-
用正则表达式解析域名会产生许多人们在上面忘记的边缘情况。这就像在 XML/HTML 上使用正则表达式:不好。
www.dk的域名是什么? (它是www.dk)。对于www.example.co.uk,域名是什么(它是example.co.uk)。等等。不,在所有一般情况下,您不能在第一个点上拆分(对于www.intranet.example.com,您想要的域名是什么?可能是example.com)等等。所以相反:从您关心的 TLD 列表开始,提取这些 TLD 中的域(简单:domain = label.TLD),然后比较域。 -
这也很难,因为这些域通常是内部的,并且故意使用一些晦涩的命名,所以我见过从“青色”到带有破折号的 TLD 的任何地方。这使得对用户可能拥有的可能 TLD 进行编目变得困难。由于这些 FQDN 将用于 AD 控制的 Windows 主机,因此我不担心剥离
www之类的内容,但有些 FQDN 可能不仅仅是简单的host.domain.example格式,所以这会导致问题。我可能只是回到为主机名设置两个字段,而对域只有一个字段,然后将它们组合为 FQDN。