【问题标题】:How could I determine if domain name is upper-level(primary) or lower-level(secondary)?如何判断域名是上级(一级)还是下级(二级)?
【发布时间】:2014-08-14 10:39:42
【问题描述】:

有什么算法可以解决这个问题吗? 例如

 twitter.com
 zamg.ac.at

是顶级域 和

pic.twitter.com

是二级域名

【问题讨论】:

  • 我猜你的意思不是像 DNS 中的 TLD。那么在您的情况下,算法将在. 上拆分并取第二个最右边的值? (我知道不是很复杂)

标签: java algorithm subdomain


【解决方案1】:

定义:

不,AFAIK 是这样的:

示例:pic.twitter.com

顶级域名:com 二级域名:twitter 子域:pic(以及pic 之前的所有其他潜在部分)

换句话说,架构是(subdomain.)*secondlevel.toplevel

因此:zamg.ac.at 不是顶级域,而是ac.at 的子域,顶级域为at

算法:

您可以按点拆分并将最后一部分用作 tld,将倒数第二部分用作第二级,其余部分用作子域。

但是,如果您想在应用程序语义的上下文中将 zamg.ac.attwitter.com 定义为顶级(不要将其与对顶级的一般理解混为一谈),那么您需要一些映射,因为没有明显的模式。

为什么需要映射:

.co.uk 为例:目前有google.co.uk 在您的语义中是顶级的,但是AFAIK 现在也可以注册google.uk(我想说这只是一个问题完成此操作的时间),因此两个域将处于同一级别(至少据我了解您的问题),但具有不同数量的部分。

至于.uk,您不能使用模式[^\.]+(\.\w{2})?\.\w{2}$ 来查找域的“顶级”部分,因为可能有“顶级”域使用更长的实际二级部分,例如.ltd.uk.police.uk。这仅适用于.uk tld,还有很多其他的。

【讨论】:

    【解决方案2】:

    如上一个答案所述,您需要一个映射 - 最好的来源是 publicsuffix.org,它为此目的维护了一个详细规则列表。 许多编程语言中有一系列库(完整列表为 here),它们可以在给定 URL 的情况下确定 TLD(更准确地说:可注册域部分)。

    以下是使用 [whois-server-list] https://github.com/whois-server-list/public-suffix-list 从主机获取可注册域的示例!图书馆。 host String 变量是有效 URL 的主机部分(例如 www.publicsuffix.org)。 PublicSuffixListPublicSuffixListFactoryde.malkusch.whoisServerList.publicSuffixList 包的类。

    PublicSuffixListFactory factory = new PublicSuffixListFactory();
    PublicSuffixList suffixListResolver = factory.build();
    String registrableDomain = suffixListResolver.getRegistrableDomain(host); 
    

    【讨论】:

    • 虽然这在理论上可以回答问题,it would be preferable 在这里包含答案的基本部分,并提供链接以供参考。
    • @Draken 好点,我已经编辑了响应以符合相应的准则。
    猜你喜欢
    • 2021-11-23
    • 1970-01-01
    • 2016-12-04
    • 1970-01-01
    • 1970-01-01
    • 2011-04-23
    • 2017-06-11
    • 2017-09-18
    • 2013-01-24
    相关资源
    最近更新 更多