有什么方法可以列出域的所有DNS记录吗?
我知道dig和nslookup这样的东西,但它们只走了这么远。例如,如果我有一个子域A记录为
test A somedomain.co.uk
然后除非我特别要求,例如。
dig any test.somedomain.co.uk
我看不到它。
有没有办法(除了通过访问DNS管理器查看记录)以确切了解所有DNS记录是什么?
答案 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)
区域转移是确保拥有所有子域记录的唯一方法。如果DNS配置正确,通常无法执行外部区域传输。
scans.io项目有一个DNS记录数据库,可以下载和搜索子域名。这需要下载87GB的DNS数据,或者您可以尝试在https://hackertarget.com/find-dns-host-records/
答案 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记录的状态,或者检查“名称服务器”以查看服务器要提取的记录。
通过导航到“开始”>“命令提示符”或通过“运行”>“ CMD”来启动Windows命令提示符。
键入NSLOOKUP,然后按Enter。默认服务器设置为您的本地DNS,地址将是您的本地IP。
通过键入set type = ##(其中##是记录类型)来设置您要查找的DNS记录类型,然后按Enter。您可以使用A,AAAA,A + AAAA,ANY,CNAME,MX,NS,PTR,SOA或SRV作为记录类型。
现在输入您要查询的域名,然后按Enter。。在此示例中,我们将使用Managed.com。
NSLOOKUP现在将返回您输入的域的记录条目。
您还可以更改要查询的名称服务器。如果要在DNS完全传播之前检查记录,这将很有用。要更改名称服务器,请键入服务器[名称服务器]。用您要使用的名称服务器替换[名称服务器]。在此示例中,我们将其设置为NSA.managed.com。
更改后,根据需要更改查询类型(第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。