【问题标题】:How can I list ALL DNS records? [closed]如何列出所有 DNS 记录? [关闭]
【发布时间】:2013-10-19 19:38:34
【问题描述】:

有什么方法可以列出域的所有 DNS 记录?

我知道诸如 dig 和 nslookup 之类的东西,但它们只到此为止。例如,如果我有一个子域 A 记录为

test A somedomain.co.uk

那么除非我特别要求,例如。

dig any test.somedomain.co.uk

我看不到。

有没有什么方法(除了通过 DNS 管理器查看记录)来准确查看所有 DNS 记录是什么?

【问题讨论】:

标签: dns


【解决方案1】:

您想要的称为区域转移。您可以使用dig -t axfr 请求区域转移。

zone 是一个域以及它下面的所有未委托给其他服务器的域。

请注意,并非始终支持区域传输。它们不用于正常查找,仅用于在服务器之间复制 DNS 数据;但还有其他协议可用于此目的(例如 rsync over ssh),公开名称可能存在安全风险,并且区域传输响应的生成和发送成本高于通常的 DNS 查找。

【讨论】:

    【解决方案2】:

    当您查询 ANY 时,您将获得该级别的所有记录列表,但不会低于此级别。

    # try this
    dig google.com any
    

    如果域名正好是“google.com”,这可能会返回 A 记录、TXT 记录、NS 记录、MX 记录等。但是,它不会返回子记录(例如 www.google.com)。更准确地说,如果它们存在,您可能会得到这些记录。如果名称服务器选择不返回这些记录(例如,为了减小响应的大小),则它不必返回这些记录。

    AXFR 是一种区域传输,很可能是您想要的。但是,除非您控制该区域,否则这些通常受到限制且不可用。您通常会直接从权威服务器(下面的 @ns1.google.com)以及通常从可能未发布的名称服务器(隐秘名称服务器)进行区域传输。

    # This will return "Transfer failed"
    dig @ns1.google.com google.com axfr
    

    如果您可以控制该区域,则可以对其进行设置以获取受 TSIG 密钥保护的传输。这是客户端可以发送到服务器以授权传输的共享密钥。

    【讨论】:

    • 感谢(也感谢 deltab)。非常清楚的解释,证实了我的怀疑 - 它可用但对我不可用(除非我开始设置自己的名称服务器)。当我管理很多域时,如果能运行一个脚本来获取所有 DNS 条目就太好了。
    • 当我尝试这个时,Amazon 的 Route53 域名服务器不包括 TXT、MX 和 SOA。在我专门查询了这些记录后,它们包含在任何答案中。所以,把这个和一粒盐放在一起吧。
    • 我刚刚收到“连接被拒绝”
    • 解析器从未一致地解释该规范以解释 ANY 的含义。这绝对不意味着所有(有一个要求),尽管有些(不是很多)这样对待它。其他人只是转储他们的缓存,而其他人则将其限制为某些记录类型。在现代(2016 年以上),大多数提供商要么禁用 ANY(或给它一个无用的答案),要么计划这样做,因为它是许多放大攻击的常见驱动因素。
    • @NickBastin 此草案 (tools.ietf.org/html/draft-ietf-dnsop-refuse-any-06) 目前正在工作中,试图收紧此查询类型的回复模式。它还讨论了为什么/不应该使用它。
    【解决方案3】:

    在无法进行区域传输的情况下,我编写了这个小 bash 脚本,dg

    #!/bin/bash
    COMMON_SUBDOMAINS=(www mail smtp pop imap blog en ftp ssh login)
    if [[ "$2" == "x" ]]; then
        dig +nocmd "$1" +noall +answer "${3:-any}"
        wild_ips="$(dig +short "*.$1" "${3:-any}" | tr '\n' '|')"
        wild_ips="${wild_ips%|}"
        for sub in "${COMMON_SUBDOMAINS[@]}"; do
            dig +nocmd "$sub.$1" +noall +answer "${3:-any}"
        done | grep -vE "${wild_ips}"
        dig +nocmd "*.$1" +noall +answer "${3:-any}"
    else
        dig +nocmd "$1" +noall +answer "${2:-any}"
    fi
    

    现在我使用 dg example.com 来获得一个漂亮、干净的 DNS 记录列表,或者使用 dg example.com x 来包含一堆其他流行的子域。

    grep -vE "${wild_ips}" 过滤掉可能是通配符 DNS 条目(例如 * 10800 IN A 1.38.216.82)的结果的记录。否则,通配符条目会使其看起来好像每个 $COMMON_SUBDOMAN 都有记录。

    注意:这依赖于ANY 查询,即blocked by some DNS providers such as CloudFlare

    【讨论】:

    • 我知道这个解决方案远非理想,但它为我节省了很多时间,所以我希望它对其他人有用。
    • 添加dig -t txt +nocmd "$1" +noall +answer(并修改为"*.$1"等)以检查域的TXT记录。
    【解决方案4】:
    1. 区域转移是确保您拥有所有子域记录的唯一方法。如果 DNS 配置正确,您通常不能执行外部区域传输。

    2. scans.io 项目有一个 DNS 记录数据库,可以下载并搜索子域。这需要下载87GB的DNS数据,或者您可以在https://hackertarget.com/find-dns-host-records/尝试在线搜索数据

    【讨论】:

      【解决方案5】:

      host -a 效果很好,类似于dig any

      EG:

      $ host -a google.com
      Trying "google.com"
      ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10403
      ;; flags: qr rd ra; QUERY: 1, ANSWER: 18, AUTHORITY: 0, ADDITIONAL: 0
      
      
      ;; QUESTION SECTION:
      ;google.com.            IN  ANY
      
      ;; ANSWER SECTION:
      google.com.     1165    IN  TXT "v=spf1 include:_spf.google.com ip4:216.73.93.70/31 ip4:216.73.93.72/31 ~all"
      google.com.     53965   IN  SOA ns1.google.com. dns-admin.google.com. 2014112500 7200 1800 1209600 300
      google.com.     231 IN  A   173.194.115.73
      google.com.     231 IN  A   173.194.115.78
      google.com.     231 IN  A   173.194.115.64
      google.com.     231 IN  A   173.194.115.65
      google.com.     231 IN  A   173.194.115.66
      google.com.     231 IN  A   173.194.115.67
      google.com.     231 IN  A   173.194.115.68
      google.com.     231 IN  A   173.194.115.69
      google.com.     231 IN  A   173.194.115.70
      google.com.     231 IN  A   173.194.115.71
      google.com.     231 IN  A   173.194.115.72
      google.com.     128 IN  AAAA    2607:f8b0:4000:809::1001
      google.com.     40766   IN  NS  ns3.google.com.
      google.com.     40766   IN  NS  ns4.google.com.
      google.com.     40766   IN  NS  ns1.google.com.
      google.com.     40766   IN  NS  ns2.google.com.
      

      【讨论】:

      • 这没有回答问题,即如何在域的 DNS 区域中查找其他记录,即额外的子域的所有记录。这并不是说 host -a 不是一个有用的命令,它只是没有执行 OP 正在寻找的操作。
      【解决方案6】:

      我改进了Josh 的回答。我注意到dig 只显示查询的名称服务器缓存中已经存在的条目,因此最好从 SOA 中提取权威名称服务器(而不是依赖默认名称服务器)。我还禁用了通配符 IP 的过滤,因为通常我通常对设置的正确性更感兴趣。

      新脚本采用 -x 参数来扩展输出和 -s NS 参数来选择特定的名称服务器:dig -x example.com

      #!/bin/bash
      set -e; set -u
      COMMON_SUBDOMAINS="www mail mx a.mx smtp pop imap blog en ftp ssh login"
      EXTENDED=""
      
      while :; do case "$1" in
        --) shift; break ;;
        -x) EXTENDED=y; shift ;;
        -s) NS="$2"; shift 2 ;;
        *) break ;;
      esac; done
      DOM="$1"; shift
      TYPE="${1:-any}"
      
      test "${NS:-}" || NS=$(dig +short  SOA "$DOM" | awk '{print $1}')
      test "$NS" && NS="@$NS"
      
      if test "$EXTENDED"; then
        dig +nocmd $NS "$DOM" +noall +answer "$TYPE"
        wild_ips=$(dig +short "$NS" "*.$DOM" "$TYPE" | tr '\n' '|')
        wild_ips="${wild_ips%|}"
        for sub in $COMMON_SUBDOMAINS; do
          dig +nocmd $NS "$sub.$DOM" +noall +answer "$TYPE"
        done | cat  #grep -vE "${wild_ips}"
        dig +nocmd $NS "*.$DOM" +noall +answer "$TYPE"
      else
        dig +nocmd $NS "$DOM" +noall +answer "$TYPE"
      fi
      

      【讨论】:

      • 添加行dig -t txt +nocmd $NS "$DOM" +noall +answer(并修改$DOM)以检查域的TXT记录。
      • 那应该是dig -t txt +nocmd $NS "$DOM" +noall +answer "$TYPE",它在if test "$EXTENDED"; then块内,
      【解决方案7】:

      没有简单的方法可以在一个实例中获取域的所有 DNS 记录。 您只能查看某些记录,例如,如果您想查看某个域的 A 记录,您可以使用命令:dig a(type of record) domain.com。对于您想为该域查看的所有其他类型的记录,这都是相同的。

      如果您不熟悉命令行界面,您也可以使用 mxtoolbox.com 之类的网站。 Wich 是获取域记录的非常方便的工具。

      我希望这能回答你的问题。

      【讨论】:

        【解决方案8】:

        对于 Windows:

        您可能需要检查域 DNS 记录的状态,或检查名称服务器以查看服务器正在提取哪些记录。

        1. 通过导航到“开始”>“命令提示符”或通过“运行”>“CMD”启动 Windows 命令提示符。

        2. 键入 NSLOOKUP 并按 Enter。默认服务器设置为您的本地 DNS,地址将是您的本地 IP。

        3. 通过键入set type=## 设置您希望查找的 DNS 记录类型,其中 ## 是记录类型,然后按 Enter。您可以使用 ANY、A、AAAA、A+AAAA、CNAME、MX、NS、PTR、SOA 或 SRV 作为记录类型。

        4. 现在输入您要查询的域名,然后按 Enter。在本例中,我们将使用 Managed.com。

        5. NSLOOKUP 现在将返回您输入的域的记录条目。

        6. 您还可以更改正在查询的名称服务器。如果您在 DNS 完全传播之前检查记录,这很有用。更改名称服务器类型服务器 [名称服务器]。将 [name server] 替换为您希望使用的名称服务器。在本例中,我们将这些设置为 NSA.managed.com。

        7. 更改后,根据需要更改查询类型(步骤 3),然后输入新域(步骤 4。)

        对于 Linux:

        1) 使用 Dig 命令检查 DNS 记录 Dig 代表域信息 groper 是一种用于询问 DNS 名称服务器的灵活工具。它执行 DNS 查找并显示从被查询的名称服务器返回的答案。大多数 DNS 管理员使用 dig 来解决 DNS 问题,因为它具有灵活性、易用性和清晰的输出。其他查找工具的功能往往比 dig 少。

        2) 使用 NSlookup 命令检查 DNS 记录 Nslookup 是一个查询 Internet 域名服务器的程序。 Nslookup 有交互和非交互两种模式。

        交互模式允许用户查询名称服务器以获取有关各种主机和域的信息,或打印域中的主机列表。

        非交互模式用于仅打印主机或域的名称和请求的信息。它是一种网络管理工具,可帮助他们检查和解决 DNS 相关问题。

        3) 使用 Host 命令检查 DNS 记录 host 是一个用于执行 DNS 查找的简单实用程序。它通常用于将名称转换为 IP 地址,反之亦然。当没有给出参数或选项时,主机会打印其命令行参数和选项的简短摘要。

        【讨论】:

        • 这在 Windows 7 中非常适合我,但在 Windows 10 中似乎有问题,这是我用来在 Windows 10 中调试 TXT 记录的方法:nslookup -querytype=txt yourdomainnamehere.com跨度>
        • 最后提醒一下,使用 nslookup 命令的 'ls' 参数。例如:1) nslookup 2) 服务器 89.179.244.127 3) ls ok-dancetour.ru。注意力!域名末尾的 DOT - 必不可少,“ok-dancetour.ru”和“ok-dancetour.ru”。 - 这些是不同的名称
        • 为 google.com 做了这个,但只得到了一个 ip,这似乎是错误的
        【解决方案9】:

        许多 DNS 服务器拒绝“任何”查询。所以唯一的方法是单独查询每种类型。幸运的是,有些网站可以让这变得更简单。例如,https://www.nslookup.io 默认显示最流行的记录类型,并且支持所有现有记录类型。

        【讨论】:

          【解决方案10】:
          dig @8.8.8.8 example.domain any
          

          将列出所有 DNS 记录。这里8.8.8.8 是 Google 的 DNS。

          【讨论】:

          • 这是绝对错误的。 any 绝不是 all。充其量它会向您显示当前在解析器缓存中的所有记录,这当然不是所有可以存在的记录,并且会根据您查询的名称服务器和时间而产生不同的结果。加上更新的标准使解析器甚至不再费心回复ANY 查询。见rfc-editor.org/rfc/rfc8482.txt
          猜你喜欢
          • 2019-11-04
          • 2018-03-22
          • 2017-05-13
          • 1970-01-01
          • 2015-10-10
          • 2013-02-21
          • 2017-01-09
          • 2011-10-12
          • 1970-01-01
          相关资源
          最近更新 更多