2

我正在尝试编写一个脚本,其部分功能取决于用户提供的域是否是区域顶点(example.com)(www.example.com)。确定我是在处理区域顶点还是子域的可靠方法是什么?我希望有一种纯粹基于模式的方法,但这似乎很棘手(例如:xx.yy.co 不是根域,但 xx.co.uk 是)。

是否有任何经过验证的真实方法来确定区域是否为根域?

4

4 回答 4

6

公共后缀列表表示可以在其下注册域名的顶级域和二级域的列表。如果一个名称在此列表中的匹配条目之外恰好多一级,那么它就是您要查找的内容。

(请注意,您所称的“子域”本身可以是 DNS 区域,并具有独立于父区域的名称服务器。这些通常可以通过存在该完全限定名称的 SOA 记录和该名称的名称服务器来检测在父区域中。)

于 2013-05-04T00:46:41.167 回答
3

是的,我必须编写一个最近执行此操作的脚本。

  1. dig +norecurse针对您正在检查的实体的权威名称服务器运行非递归查询(即)。使用查询类型SOA。不要使用递归服务器,行为变得难以预测。如果它是混合身份验证和递归答案的服务器,请确保您正在检查AA回复中的(权威答案)标志。
  2. 如果响应代码是NOERROR,请检查返回ANSWER部分的最左侧组件(如果存在)。否则,请检查该AUTHORITY部分。两者之一将出现。首选的结果ANSWER是,这可以确保您的结果是SOA记录而不是NS记录。它使您的结果类型保持一致,如果您正在针对解析器库编写一些东西,这可能会很有用。
  3. 如果响应代码是NXDOMAIN,请检查返回AUTHORITY部分的最左侧组件。显然这不会是顶点,但这会告诉你顶点是什么。
  4. 除了这些响应代码之外的任何内容都表明服务器不认为自己具有权威性。
  5. 结果将是顶点。如果您的结果不太具体,则您的请求不是顶点,如果它们相同,则它是顶点。
于 2013-05-03T23:44:57.480 回答
0

www.example.com(假设它不是子域,例如,没有 foo.www.example.com 条目)将没有 DNS SOA RR。但是,example.com 可能还有其他子域,例如 xyz.example.com 包含 foo.xyz.example.com 和 bar.xyz.example.com,所以我不知道这是否对您有帮助。

于 2013-05-03T23:53:16.493 回答
0

通过组件检查 NS 记录来向后遍历名称组件。

示例:www.example.com

  1. 是否 www.example.com。有NS记录吗?不。
  2. 做example.com。有NS记录吗?是的。
  3. com。有NS记录吗?是的。

根据您对“是区域顶点”使用的任何定义做出相应的决定(从您的问题中我不是 100% 清楚。)

于 2013-05-04T01:55:52.463 回答