有什么方法可以列出域的所有 DNS 记录?
我知道诸如 dig 和 nslookup 之类的东西,但它们只到此为止。例如,如果我有一个子域 A 记录为
test A somedomain.co.uk
那么除非我特别要求,例如。
dig any test.somedomain.co.uk
我看不到它。
有没有办法(除了通过 DNS 管理器查看记录)来查看所有 DNS 记录的确切内容?
有什么方法可以列出域的所有 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 密钥保护的传输。这是客户端可以发送到服务器以授权传输的共享机密。
我改进了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
host -a
效果很好,类似于dig any
.
例如:
$ 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.
在无法进行区域传输的情况下,我编写了这个小 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
查询,这些查询被 CloudFlare 等一些 DNS 提供商阻止。
对于 Windows:
您可能需要检查域 DNS 记录的状态,或检查名称服务器以查看服务器正在提取哪些记录。
通过导航到“开始”>“命令提示符”或通过“运行”>“CMD”启动 Windows 命令提示符。
键入 NSLOOKUP 并按 Enter。默认服务器设置为您的本地 DNS,地址将是您的本地 IP。
通过键入 ## 是记录类型来设置要查找的 DNS 记录set type=##
类型,然后按 Enter。您可以使用 ANY、A、AAAA、A+AAAA、CNAME、MX、NS、PTR、SOA 或 SRV 作为记录类型。
现在输入您要查询的域名,然后按 Enter 键。在此示例中,我们将使用 Managed.com。
NSLOOKUP 现在将返回您输入的域的记录条目。
您还可以更改要查询的名称服务器。如果您在 DNS 完全传播之前检查记录,这很有用。更改名称服务器类型服务器 [名称服务器]。将 [name server] 替换为您希望使用的名称服务器。在本例中,我们将这些设置为 NSA.managed.com。
更改后,根据需要更改查询类型(步骤 3),然后输入新域(步骤 4。)
对于 Linux:
1) 使用 Dig 命令检查 DNS 记录 Dig 代表域信息 groper,是一种用于询问 DNS 名称服务器的灵活工具。它执行 DNS 查找并显示从被查询的名称服务器返回的答案。大多数 DNS 管理员使用 dig 来解决 DNS 问题,因为它具有灵活性、易用性和清晰的输出。其他查找工具的功能往往比 dig 少。
2) 使用 NSlookup 命令检查 DNS 记录 Nslookup 是一个查询 Internet 域名服务器的程序。Nslookup 有交互和非交互两种模式。
交互模式允许用户查询名称服务器以获取有关各种主机和域的信息或打印域中的主机列表。
非交互模式用于仅打印主机或域的名称和请求的信息。它是一种网络管理工具,可帮助他们检查和解决 DNS 相关问题。
3) 使用主机命令检查 DNS 记录 host 是一个用于执行 DNS 查找的简单实用程序。它通常用于将名称转换为 IP 地址,反之亦然。当没有给出参数或选项时,主机打印其命令行参数和选项的简短摘要。
区域转移是确保您拥有所有子域记录的唯一方法。如果 DNS 配置正确,您通常不能执行外部区域传输。
scans.io项目有一个 DNS 记录数据库,可以下载并搜索子域。这需要下载 87GB 的 DNS 数据,或者您可以尝试在https://hackertarget.com/find-dns-host-records/在线搜索数据
您想要的称为区域转移。您可以使用 请求区域转移dig -t axfr
。
区域是一个域以及它下面的所有域,它们没有被委派给另一台服务器。
请注意,并不总是支持区域传输。它们不用于正常查找,仅用于在服务器之间复制 DNS 数据;但是还有其他协议可以用于此(例如 rsync over ssh),暴露名称可能存在安全风险,并且区域传输响应的生成和发送成本高于通常的 DNS 查找。
许多 DNS 服务器拒绝“任何”查询。所以唯一的方法是单独查询每种类型。幸运的是,有一些网站可以让这变得更简单。例如,https://www.nslookup.io默认显示最流行的记录类型,并且支持所有现有的记录类型。
没有简单的方法可以在一个实例中获取域的所有 DNS 记录。您只能查看某些记录,例如,如果您想查看某个域的 A 记录,您可以使用命令:dig a(type of record) domain.com。对于您想为该域查看的所有其他类型的记录,这都是相同的。
如果您不熟悉命令行界面,也可以使用 mxtoolbox.com 之类的网站。Wich 是获取域记录的非常方便的工具。
我希望这回答了你的问题。
dig @8.8.8.8 example.domain any
将列出所有 DNS 记录。这8.8.8.8
是谷歌的DNS。