有没有一种编程方法可以从给定的主机名中找到域名?
给定-> www.yahoo.co.jp return -> yahoo.co.jp
有效但非常慢的方法是:
拆分“。”并从左侧删除1个组,使用dnspython连接和查询SOA记录当返回有效的SOA记录时,考虑域
有没有一种更干净/更快的方法,不用使用regexp就可以做到这一点?
发布于 2009-05-06 07:09:23
对于哪个“域名”是任何特定“主机名”的父名称,都没有微不足道的定义。
您当前遍历树直到看到SOA记录的方法实际上是最正确的。
从技术上讲,您在那里所做的是找到一个“区域切割”,并且在绝大多数情况下,这将对应于域从其TLD委派的点。
任何仅依赖于主机名的文本解析而不参考DNS的方法都注定要失败。
或者,使用来自http://publicsuffix.org/的集中维护的以委派为中心的域的列表,但要注意这些列表可能不完整和/或过期。
另请参阅this question,所有这些内容以前都已经介绍过了……
发布于 2009-05-05 16:26:18
您可以使用partition而不是split
>>> 'www.yahoo.co.jp'.partition('.')[2]
'yahoo.co.jp'这将有助于解析,但显然不会检查返回的字符串是否是有效的域。
发布于 2009-05-06 07:16:22
你的算法是正确的。由于区域剪切是而不是反映在域名中(您看到的是域名剪切-点-但没有区域剪切),所以它是唯一正确的。
近似算法是使用区域列表,就像Alnitak提到的那样。请记住,这些静态列表没有权威性,它们缺少很多注册表,它们已经过时了,等等。
https://stackoverflow.com/questions/825694
复制相似问题