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

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

test A somedomain.co.uk

除非我特别提出要求。

dig any test.somedomain.co.uk

我看不见。

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


当前回答

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

其他回答

区域传输是确保您拥有所有子域记录的唯一方法。如果DNS配置正确,则通常不能执行外部区域传输。 的扫描。io项目有一个DNS记录数据库,可以下载和搜索子域。这需要下载87GB的DNS数据,或者您可以尝试在https://hackertarget.com/find-dns-host-records/上在线搜索数据

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

简单地说,这通常是不可能的,除非你控制了这个领域。

选项1:ANY查询

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

# try this
dig google.com any

这可能会返回A记录,TXT记录,NS记录,MX记录等,如果域名是“google.com”。但是,它不会返回子记录(例如,www.google.com)。更准确地说,如果这些记录存在,您可能会得到它们。

如果名称服务器选择不返回这些记录(例如,为了减少响应的大小),则不必返回这些记录。大多数DNS服务器拒绝任何查询。

选项2:AXFR查询

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

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

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

选项3:用脚本刮

另一种选择是使用脚本抓取所有DNS记录。您必须遍历所有DNS记录类型,还必须遍历公共子域,具体取决于您的需要。

选项4:使用专门的工具

有一些在线工具可以枚举子域,还有一些在线工具可以列出DNS名称的所有DNS记录。注意,子域枚举通常不是详尽的。

Windows:

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

Launch Windows Command Prompt by navigating to Start > Command Prompt or via Run > CMD. Type NSLOOKUP and hit Enter. The default Server is set to your local DNS, the Address will be your local IP. Set the DNS Record type you wish to lookup by typing set type=## where ## is the record type, then hit Enter. You may use ANY, A, AAAA, A+AAAA, CNAME, MX, NS, PTR, SOA, or SRV as the record type. Now enter the domain name you wish to query then hit Enter.. In this example, we will use Managed.com. NSLOOKUP will now return the record entries for the domain you entered. You can also change the Name Servers which you are querying. This is useful if you are checking the records before DNS has fully propagated. To change the Name Server type server [name server]. Replace [name server] with the Name Servers you wish to use. In this example, we will set these as NSA.managed.com. Once changed, change the query type (Step 3) if needed then enter new a new domain (Step 4.)

Linux:

1)使用Dig命令查看DNS记录 Dig是域名信息探勘器(domain information groper)的缩写,是一种用于查询DNS名称服务器的灵活工具。它执行DNS查找并显示从所查询的名称服务器返回的答案。大多数DNS管理员使用dig来排除DNS问题,因为它的灵活性、易用性和输出的清晰度。其他查找工具的功能往往不如dig。

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

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

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

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