有什么办法可以列出一个域名的所有DNS记录吗?
我知道诸如dig和nslookup之类的东西,但它们只能做到这一步。例如,如果我有一个子域的A记录为
test A somedomain.co.uk
那么,除非我特别要求它,例如。
dig any test.somedomain.co.uk
我看不到它。
有没有什么办法(除了通过进入DNS管理器查看记录外)可以看到所有的DNS记录到底是什么?
当你查询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密钥保护的传输。这是一个共享的秘密,客户可以将其发送给服务器以授权传输。
在没有能力进行区域转移的情况下,我写了这个小的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 "查询,这被一些DNS提供商如CloudFlare所阻止。