【问题标题】:How do I extract the hostname and the (sub)domain from a FQDN in Python?如何从 Python 中的 FQDN 中提取主机名和(子)域?
【发布时间】:2021-04-20 16:55:14
【问题描述】:

我正在尝试编写一个脚本,该脚本将采用 FQDN 并为我提供主机名和(子)域。

我能够获取主机名,但我不知道如何获取整个域,包括任何子域。

请注意,这些域和子域将是内部域,而不是公共域。

import re 

words = "testing.something.thisdomain.com"
 

stuff = re.match(r"(.+?)(?=\.)", words)

print(stuff.group(1))

【问题讨论】:

  • 也许你可以用分隔符(“.”)分割域,最后 2 将是域
  • 你想要什么结果?你会用testing.something.thisdomain.co.uk做什么?
  • 我想要 2 个结果,主机名“testing”和整个域(包括任何子域)“something.thisdomain.com”。这将用于提供其他脚本以及作为输入验证的早期阶段。
  • 你不能只用一个正则表达式。有了“www.forsyth.k12.ga.us”这个名字,你将如何拆分它?要执行您想要的操作,您需要使用公共后缀列表和/或执行 DNS 查询和一些启发式方法。只看字符串是不够的。
  • @1v3m " 和最后 2 将是域" 这是错误的。请参阅之前的评论,或尝试例如www.sante.gouv.frgouv.fr 是您意义上的域名吗?我怀疑。

标签: python python-3.x automation scripting dns


【解决方案1】:

我们不能只在字符串上使用 split 并打印您需要的部分,而不是做一堆花哨的正则表达式吗?

words = "testing.something.thisdomain.com"
stuff = words.split(".")
print(stuff[1])

【讨论】:

    【解决方案2】:

    即使您的 fqdn 没有任何子域,这也有效

    代码:

    fqdn = "testing.something.thisdomain.com"
    tld, domain, *sub_domains = fqdn.split(".")[::-1]
    print(tld,domain,sub_domains)
    

    输出:

    com thisdomain ['something', 'testing']
    

    【讨论】:

    • 名称失败(例如):www.forsyth.k12.ga.us
    • @Patrick -- us ga ['k12', 'forsyth', 'www'] -- 不,它不会失败
    • 确实如此,因为“子域”不是ga.us(您不能在此级别注册)也不是www.forsyth.k12。预期的拆分更多 www 是域 forsyth.k12.ga.us 内的主机名,它是 k12.ga.us 的子域。
    猜你喜欢
    • 2010-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多