我正在尝试编写一个脚本,其部分功能取决于用户提供的域是否是区域顶点(example.com)(www.example.com)。确定我是在处理区域顶点还是子域的可靠方法是什么?我希望有一种纯粹基于模式的方法,但这似乎很棘手(例如:xx.yy.co 不是根域,但 xx.co.uk 是)。
是否有任何经过验证的真实方法来确定区域是否为根域?
公共后缀列表表示可以在其下注册域名的顶级域和二级域的列表。如果一个名称在此列表中的匹配条目之外恰好多一级,那么它就是您要查找的内容。
(请注意,您所称的“子域”本身可以是 DNS 区域,并具有独立于父区域的名称服务器。这些通常可以通过存在该完全限定名称的 SOA 记录和该名称的名称服务器来检测在父区域中。)
是的,我必须编写一个最近执行此操作的脚本。
dig +norecurse
针对您正在检查的实体的权威名称服务器运行非递归查询(即)。使用查询类型SOA
。不要使用递归服务器,行为变得难以预测。如果它是混合身份验证和递归答案的服务器,请确保您正在检查AA
回复中的(权威答案)标志。NOERROR
,请检查返回ANSWER
部分的最左侧组件(如果存在)。否则,请检查该AUTHORITY
部分。两者之一将出现。首选的结果ANSWER
是,这可以确保您的结果是SOA
记录而不是NS
记录。它使您的结果类型保持一致,如果您正在针对解析器库编写一些东西,这可能会很有用。NXDOMAIN
,请检查返回AUTHORITY
部分的最左侧组件。显然这不会是顶点,但这会告诉你顶点是什么。www.example.com(假设它不是子域,例如,没有 foo.www.example.com 条目)将没有 DNS SOA RR。但是,example.com 可能还有其他子域,例如 xyz.example.com 包含 foo.xyz.example.com 和 bar.xyz.example.com,所以我不知道这是否对您有帮助。
通过组件检查 NS 记录来向后遍历名称组件。
示例:www.example.com
根据您对“是区域顶点”使用的任何定义做出相应的决定(从您的问题中我不是 100% 清楚。)