如何列出所有DNS记录?

时间:2013-10-11 16:28:30

标签: dns

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

我知道dig和nslookup这样的东西,但它们只走了这么远。例如,如果我有一个子域A记录为

test A somedomain.co.uk

然后除非我特别要求,例如。

dig any test.somedomain.co.uk

我看不到它。

有没有办法(除了通过访问DNS管理器查看记录)以确切了解所有DNS记录是什么?

10 个答案:

答案 0 :(得分:173)

当您查询任何内容时,您将获得该级别但不低于该级别的所有记录的列表。

# 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密钥保护的传输。这是客户端可以发送到服务器以授权传输的共享密钥。

答案 1 :(得分:22)

我改进了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

答案 2 :(得分:15)

如果没有区域转移的能力,我写了这个小的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个{{1}}查询。

答案 3 :(得分:13)

  1. 区域转移是确保拥有所有子域记录的唯一方法。如果DNS配置正确,通常无法执行外部区域传输。

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

  3. 上在线搜索数据

答案 4 :(得分:11)

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

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

请注意,并不总是支持区域传输。它们不用于正常查找,仅用于在服务器之间复制DNS数据;但是可以使用其他协议(例如ssh上的rsync),暴露名称可能存在安全风险,而区域传输响应生成和发送的成本要高于通常的DNS查找。

答案 5 :(得分:10)

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.

答案 6 :(得分:1)

对于Windows:

您可能会发现需要检查域DNS记录的状态,或者检查“名称服务器”以查看服务器要提取的记录。

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

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

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

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

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

  6. 您还可以更改要查询的名称服务器。如果要在DNS完全传播之前检查记录,这将很有用。要更改名称服务器,请键入服务器[名称服务器]。用您要使用的名称服务器替换[名称服务器]。在此示例中,我们将其设置为NSA.managed.com。

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

对于Linux:

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

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

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

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

3)使用主机命令检查DNS记录 host是用于执行DNS查找的简单实用程序。通常用于将名称转换为IP地址,反之亦然。如果未提供任何参数或选项,主机将打印其命令行参数和选项的简短摘要。

答案 7 :(得分:0)

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

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

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

答案 8 :(得分:0)

许多DNS服务器拒绝“任何”查询。因此,唯一的方法是分别查询每种类型。幸运的是,有些站点使此过程变得更简单。例如,https://www.nslookup.io默认显示最受欢迎的记录类型,并支持所有现有记录类型。

答案 9 :(得分:-1)

dig @8.8.8.8 example.domain any

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