我正在尝试编写一个脚本,其部分功能取决于用户提供的域是否为区域apex(example.com)或不是(www.example.com)。有什么方法可以确定我是在处理区域顶点还是子域?我希望采用纯粹的基于模式的方法,但这看起来很棘手(例如:xx.yy.co不是根域,但xx.co.uk是)。
是否有任何经过验证的方法来确定某个区域是否为根域?
答案 0 :(得分:4)
Public Suffix List表示可以注册域名的顶级域名和二级域名列表。如果一个名称只有一个超出其列表中匹配条目的级别,那么它就是区域顶点。
答案 1 :(得分:3)
是的,我不得不写一个最近执行此操作的脚本。
dig +norecurse
)。使用查询类型SOA
。不要使用递归服务器,行为变得难以预测。如果它是混合auth和递归答案的服务器,请确保在答复中检查AA
(权威答案)标记。NOERROR
,请检查返回的ANSWER
部分的最左侧组件(如果存在)。否则,请查看AUTHORITY
部分。其中一个将出席。偏好ANSWER
的结果是,这可以确保您的结果是SOA
记录,而不是NS
记录。它使结果的类型保持一致,如果您针对解析程序库编写内容,这可能很有用。NXDOMAIN
,请检查返回的AUTHORITY
部分的最左侧组件。显然这不是顶点,但这会告诉你顶点是什么。答案 2 :(得分:0)
www.example.com(假设它不是子域,例如,没有foo.www.example.com条目)将没有DNS SOA RR。但是,example.com可能有其他子域名,例如xyz.example.com,其中包含foo.xyz.example.com和bar.xyz.example.com,因此我不知道这是否对您有所帮助。
答案 3 :(得分:0)
将组件名称向后移动,逐个组件检查NS记录。
示例:www.example.com
根据你所使用的“区域顶点”的定义做出相应的决定(我的问题不是100%明确的。)