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

我知道像dig和nslookup这样的东西,但它们只能到此为止。例如,如果我有一个子域a记录为

test A somedomain.co.uk

除非我特别提出要求。

dig any test.somedomain.co.uk

我看不见。

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


当前回答

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

如果你不熟悉命令行界面,你也可以使用像mxtoolbox.com这样的网站。Wich是非常方便的工具,以获得一个领域的记录。

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

其他回答

在没有区域传输功能的情况下,我写了这个小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_subdomain都有记录。

注意:这依赖于任何查询,这些查询被一些DNS提供商(如CloudFlare)阻止。

我改进了乔什的答案。我注意到,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 @8.8.8.8 example.domain any

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

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

如果你不熟悉命令行界面,你也可以使用像mxtoolbox.com这样的网站。Wich是非常方便的工具,以获得一个领域的记录。

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

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