是否有以编程方式从给定主机名中查找域名?
给出 - > www.yahoo.co.jp 返回 - > yahoo.co.jp
有效但速度很慢的方法是:
拆分为“。”并从左侧删除1个组,使用dnspython连接并查询SOA记录 返回有效的SOA记录时,请考虑该域
如果不使用正则表达式,是否有更简洁/更快的方法?
答案 0 :(得分:15)
没有简单的定义“域名”是任何特定“主机名”的父级。
您当前遍历树的方法直到看到SOA
记录实际上是最正确的。
从技术上讲,你在那里做的是找到一个“区域切割”,在绝大多数情况下,这将与域名从其顶级域名授权的点相对应。
任何依赖于主机名文本解析而不引用DNS的方法都注定要失败。
或者,使用http://publicsuffix.org/中集中维护的以委托为中心的域名列表,但要注意这些列表可能不完整和/或过时。
另见this question所有这些都已经过去......
答案 1 :(得分:3)
您可以使用partition
代替split
:
>>> 'www.yahoo.co.jp'.partition('.')[2]
'yahoo.co.jp'
这将有助于解析,但显然不会检查返回的字符串是否是有效域。
答案 2 :(得分:1)
您的算法是正确的算法。由于区域切割不反映在域名中(您看到域切割 - 点 - 但不是区域切割),它是唯一正确的。
近似算法是使用区域列表,如Alnitak提到的区域。请记住,这些静态列表不具有权威性,它们缺少许多注册表,它们是陈旧的等等。