我一直在缓慢而稳定地开发一个 bash 脚本,该脚本可以快速获取有关域的一些基本 DNS 信息。(想想 LeafDNS 或 IntoDNS,但我可以从 CLI 快速运行。)今天,一位同事给了我完成脚本所需的最后一部分,即如何获取指向域的名称服务器(及其 IP)到,由域的注册商报告 vís-a-vís dig +trace +additional
。
然而,问题在于它dig +trace +additional
返回了很多我既不需要也不需要的额外信息。在返回的四个文本块(由空行分隔)中,我只需要第三个(前两个是根名称服务器,以及 TLD 的父名称服务器,第四个块是 DNS 区域中报告的名称服务器)。理想情况下,我还想省略 dig 附加到第三个文本块末尾的注释,只包含名称服务器及其 IP。
我确实找到了通过 sed 管道输出 dig 的解决方案,但我对 sed 只是模糊熟悉。当我直接复制该 sed 命令时,我得到了第一个和第三个块。这是一个输出示例:
calyodelphi@dragonpad:~ $ dig +trace +additional dragon-architect.com | sed '/^$/,/^$/!d'
; <<>> DiG 9.7.3-P3 <<>> +trace +additional dragon-architect.com
;; global options: +cmd
. 214851 IN NS m.root-servers.net.
. 214851 IN NS a.root-servers.net.
. 214851 IN NS b.root-servers.net.
. 214851 IN NS g.root-servers.net.
. 214851 IN NS j.root-servers.net.
. 214851 IN NS d.root-servers.net.
. 214851 IN NS e.root-servers.net.
. 214851 IN NS f.root-servers.net.
. 214851 IN NS l.root-servers.net.
. 214851 IN NS c.root-servers.net.
. 214851 IN NS k.root-servers.net.
. 214851 IN NS h.root-servers.net.
. 214851 IN NS i.root-servers.net.
;; Received 228 bytes from 192.168.16.1#53(192.168.16.1) in 18 ms
dragon-architect.com. 172800 IN NS ns1.dragon-architect.com.
dragon-architect.com. 172800 IN NS ns2.dragon-architect.com.
ns1.dragon-architect.com. 172800 IN A 70.84.243.130
ns2.dragon-architect.com. 172800 IN A 70.84.243.131
;; Received 106 bytes from 192.33.14.30#53(b.gtld-servers.net) in 165 ms
calyodelphi@dragonpad:~ $
在这一点上我几乎迷失了,非常感谢帮助。如果它简单、优雅、高度便携、易于阅读,并且附有 sed 命令如何工作的解释,那么我可以从中学习,则无偿加分。我也愿意使用 grep 或 awk ;哪个会产生最便携和可维护的结果。
编辑:我确实知道几个 dig 参数(特别是 +nocomments 和 +nostats)。不幸的是,它们不适用于 +trace。所以我必须用 sed 或 awk 手动删除统计信息/评论。
编辑 2:此外,直到今天我才想到解决方案需要考虑像 .co.uk 或 .com.au 这样的 TLD。我在dig +trace +additional
bbc.co.uk 和 melbourneit.com.au 等几个域上运行了 a 以查看这是否改变了输出,但它没有。仍然返回四个输出块,这意味着提供的两种解决方案仍然完全按预期工作。