如何以编程方式找到域的主要名称服务器,包括子域?

时间:2019-06-28 16:03:40

标签: dns network-programming language-agnostic cname

我想在给定域中验证给定域是否具有正确的DNS记录,而不必等待新配置传播。我想在主名称服务器上查找域以获得最新的结果,但是我发现对于子域而言,简单的SOA查找可能会失败。

> resolveSoa('subdomain.example.com')
Error: ENOTFOUND

具有定义的CNAME的子域的失败模式也有所不同(这可能取决于dns服务器软件):

> resolveSoa('cnamed-subdomain.example.com')
Error: EBADRESP

为任何(有效)域使用主要名称服务器的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

到目前为止,我找到的解决方案是:

findPrimaryNameServer(domain):
  do {
    if cname := lookupCName(domain)
       domain := cname

    soa := lookupSoa(domain)
    domain := domain.slice(domain.find(".") + 1)
  } while (!soa)

  return soa.primaryNameServer

这似乎可以处理CNAME记录和子域。