我如何列出所有的DNSlogging?

有什么办法可以列出域的所有DNSlogging?

我知道诸如dig和nslookup之类的东西,但它们只能走得这么远。 例如,如果我有一个子域Alogging为

test A somedomain.co.uk 

那么除非我特别要求,例如。

 dig any test.somedomain.co.uk 

我看不到它。

有什么办法(除了通过去DNSpipe理器查看logging)来查看所有的DNSlogging是什么?

当你查询任何你会得到一个在该级别的所有logging,但不低于列表。

 # try this dig google.com any 

如果域名完全是“google.com”,这将返回Alogging,TXTlogging,NSlogging,MXlogging等。 但它不会返回子logging(例如,www.google.com)。 更确切地说,如果存在这些logging,你可能会得到这些logging。 如果名称服务器select不这样做,则名称服务器不必返回这些logging(例如,减小响应的大小)。

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来获得一个不错的,干净的DNSlogging列表,或者dg example.com x来包含一堆其他stream行的子域名。

grep -vE "${wild_ips}"过滤掉可能是通配符DNS条目(如* 10800 IN A 1.38.216.82的结果的logging。 否则,通配符条目将使其显示为每个$COMMON_SUBDOMAN都有logging。

注意:这依赖于ANY查询,这些查询被一些DNS提供商(如CloudFlare)阻止 。

你想要什么叫做区域转移 。 您可以使用dig -t axfr请求区域传输。

一个区域是一个域,它下面的所有域都没有委托给另一台服务器。

请注意,区域传输并不总是被支持的。 它们不用于正常查找,只用于在服务器之间复制DNS数据; 但是还有其他的协议可以用于这个目的(比如通过ssh的rsync),暴露名字可能会带来安全风险,并且区域传输响应的成本比通常的DNS查找要多得多。

我改进了乔希的回答。 我注意到, dig只显示已经存在于被查询的域名服务器caching中的条目,所以最好从SOA中取一个权威的域名服务器(而不是依靠默认的域名服务器)。 我也禁用了对通配符IP的过滤,因为通常我对设置的正确性更感兴趣。

新脚本使用扩展输出的-x参数和-s NS参数来select特定的名称服务器: 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 
  1. 区域转移是确保您拥有所有子域logging的唯一方法。 如果DNSconfiguration正确,则通常无法执行外部区域传输。

  2. scans.io项目有一个DNSlogging数据库,可以下载和search子域名。 这需要下载87GB的DNS数据,或者您可以在https://hackertarget.com/find-dns-host-records/上在线search数据;

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. 

在一个实例中,没有简单的方法来获取域的所有DNSlogging。 例如,您只能查看某些logging,如果您想要查看特定域的Alogging,则可以使用以下命令:挖掘一个(loggingtypes)domain.com。 对于您希望看到的所有其他types的logging,这一点是相同的。

如果你不熟悉命令行界面,你也可以使用像mxtoolbox.com这样的网站。 这是获取域的logging非常方便的工具。

我希望这回答了你的问题。