如何列出所有DNS记录?

Ken*_*Ken 167 dns

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

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

test A somedomain.co.uk
Run Code Online (Sandbox Code Playgroud)

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

dig any test.somedomain.co.uk
Run Code Online (Sandbox Code Playgroud)

我看不出来.

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

den*_*ips 185

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

# try this
dig google.com any
Run Code Online (Sandbox Code Playgroud)

如果域名完全是"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
Run Code Online (Sandbox Code Playgroud)

如果您可以控制区域,则可以将其设置为获得受TSIG密钥保护的传输.这是客户端可以发送到服务器以授权传输的共享密钥.

  • 当我尝试使用时,亚马逊的Route53名称服务器不包括TXT,MX和SOA.在我专门查询这些记录后,他们包含在任何答案中.所以带上一粒盐. (12认同)
  • 解析者从未对规范对 ANY 的含义进行一致的解释。它绝对并不意味着全部(有这样的要求),尽管有些(不是很多)这样对待它。其他人只是转储他们的缓存,还有一些人将其限制为某些记录类型。在现代(2016 年以上),大多数提供商要么禁用 ANY(或给它一个无用的答案),要么计划这样做,因为它是许多放大攻击的常见驱动因素。 (5认同)
  • 谢谢你(也是deltab).非常明确的解释,确认我怀疑 - 它是可用的但不是我(除非我开始设置我自己的名称服务器).当我照看很多域时,只运行一个脚本来获取所有DNS条目就好了. (4认同)

dan*_*an3 26

我改进了乔希的回答.我注意到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
Run Code Online (Sandbox Code Playgroud)

  • 那应该是 `dig -t txt +nocmd $NS "$DOM" +noall +answer "$TYPE"` 并且它位于 `if test "$EXTENDED"; 然后`块, (2认同)

Zaz*_*Zaz 18

在没有区域传输能力的情况下,我写了这个小的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
Run Code Online (Sandbox Code Playgroud)

现在我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)阻止.

  • 我知道这个解决方案远非理想,但它节省了我很多时间,所以我希望它对其他人有用. (3认同)

小智 15

对于 Windows:

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

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

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

  3. 通过键入set type=##其中 ## 是记录类型来设置您要查找的 DNS 记录类型,然后按 Enter。您可以使用 ANY、A、AAAA、A+AAAA、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 管理员使用 dig 来解决 DNS 问题,因为它具有灵活性、易用性和输出清晰性。其他查找工具的功能往往比 dig 少。

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

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

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

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


小智 13

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

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


小智 13

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.
Run Code Online (Sandbox Code Playgroud)

  • 这不回答问题,即如何在域的DNS区域中查找其他记录,即子域的所有记录.这并不是说`host -a`不是一个有用的命令,它只是没有做OP正在寻找的东西. (10认同)

Ruu*_*Pul 12

许多 DNS 服务器拒绝 \xe2\x80\x98ANY\xe2\x80\x99 查询。所以唯一的方法是单独查询每种类型。幸运的是,有一些网站可以让这一切变得更简单。例如,https://www.nslookup.io默认显示最流行的记录类型,并支持所有现有记录类型。

\n


del*_*tab 11

你想要的是一个区域转移.您可以使用请求区域转移dig -t axfr.

是一个域,下面的所有域未委派到另一台服务器.

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