18

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

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

有效但非常缓慢的方法是:

拆分“。” 并从左侧删除 1 个组,当返回有效的 SOA 记录时,使用 dnspython 加入和查询 SOA 记录,考虑一个域

在不使用正则表达式的情况下,是否有更清洁/更快的方法来做到这一点?

4

3 回答 3

15

对于哪个“域名”是任何特定“主机名”的父级,没有简单的定义。

您当前遍历树直到看到SOA记录的方法实际上是最正确的。

从技术上讲,您正在做的是找到“区域切割”,并且在绝大多数情况下,这将对应于从其 TLD 委派域的点。

任何仅依赖于主机名文本解析而不参考 DNS 的方法都注定要失败。

或者,使用来自http://publicsuffix.org/的以委托为中心的域的集中维护列表,但要注意这些列表可能不完整和/或过时。

另请参阅这个问题,所有这些都已在之前完成...

于 2009-05-06T07:09:22.753 回答
4

您可以使用partition代替split

>>> 'www.yahoo.co.jp'.partition('.')[2]
'yahoo.co.jp'

这将有助于解析,但显然不会检查返回的字符串是否是有效域。

于 2009-05-05T16:26:17.807 回答
1

你的算法是正确的。由于区域切割反映在域名中(您会看到域切割 - 点 - 但不是区域切割),它是唯一正确的。

一种近似算法是使用区域列表,就像 Alnitak 提到的那样。请记住,这些静态列表不具有权威性,它们缺少许多注册表,它们是陈旧的,等等。

于 2009-05-06T07:16:21.643 回答