有什么方法可以列出一个域的所有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记录是什么?
当前回答
在没有区域传输功能的情况下,我写了这个小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_subdomain都有记录。
注意:这依赖于任何查询,这些查询被一些DNS提供商(如CloudFlare)阻止。
其他回答
你想要的叫做区域转移。您可以使用dig -t axfr请求区域转移。
一个区域是一个域和它下面所有没有委托给另一个服务器的域。
注意,并不总是支持区域传输。它们不用于正常的查找,只用于在服务器之间复制DNS数据;但是有其他协议可以用于此目的(例如ssh上的rsync),暴露名称可能存在安全风险,并且区域传输响应生成和发送的成本比通常的DNS查找要高。
区域传输是确保您拥有所有子域记录的唯一方法。如果DNS配置正确,则通常不能执行外部区域传输。 的扫描。io项目有一个DNS记录数据库,可以下载和搜索子域。这需要下载87GB的DNS数据,或者您可以尝试在https://hackertarget.com/find-dns-host-records/上在线搜索数据
dig @8.8.8.8 example.domain any
将列出所有DNS记录。这里8.8.8.8是谷歌的DNS。
主机-a工作良好,类似于挖任何。
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.
在没有区域传输功能的情况下,我写了这个小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_subdomain都有记录。
注意:这依赖于任何查询,这些查询被一些DNS提供商(如CloudFlare)阻止。