从主机名中提取域名

时间:2009-05-05 16:17:13

标签: python dns hostname

是否有以编程方式从给定主机名中查找域名?

给出 - > www.yahoo.co.jp 返回 - > yahoo.co.jp

有效但速度很慢的方法是:

拆分为“。”并从左侧删除1个组,使用dnspython连接并查询SOA记录 返回有效的SOA记录时,请考虑该域

如果不使用正则表达式,是否有更简洁/更快的方法?

3 个答案:

答案 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提到的区域。请记住,这些静态列表不具有权威性,它们缺少许多注册表,它们是陈旧的等等。