您好!我最近和几个朋友聊天,他们提到想知道如何使用dig进行DNS查找,所以这里有一个快速阅读。当我第一次使用dig时,我发现它有点吓人——有这么多选项!我将省略大部分选项。在这篇文章中,我将省略dig的大部分选项,只保留我实际使用的选项。我最近还了解到,您可以设置一个.digrc配置文件,使其输出更易于阅读,从而使其更易于使用。几年前我也画了一个关于dig的zine页面,但我想写这篇文章来包含更多信息。两种类型的dig参数:query和format有两种主要类型的参数可以传递给dig:告诉dig要进行什么DNS查找的参数。告诉dig如何格式化响应的参数。首先,让我们看看查询选项。主要查找选项关于DNS查找,您通常希望控制的三件事是:名称(例如jvns.ca)。默认情况下,查询空名称(.)。DNS查询类型(例如A或CNAME)。默认为A。发送查询的服务器(例如8.8.8.8)。默认是/etc/resolv.conf中的内容。格式为:dig@servernametype以下是几个示例:dig@8.8.8.8jvns.ca查询Google的公共DNS服务器(8.8.8.8)以获取jvns.ca。dignsjvns.ca对jvns.ca执行NS查询。-x:执行反向DNS查找我偶尔使用的另一个查找选项是-x,用于执行反向DNS查找。这是输出的样子。$dig-x172.217.13.174174.13.217.172.in-addr.arpa.72888在PTRyul03s04-in-f14.1e100.net中。-x不是魔法。dig-x172.217.13.174只是对174.13.217.172.in-addr.arpa进行PTR查找。下面是如何在没有“-x”的情况下进行完全相同的反向DNS查找。$digptr174.13.217.172.in-addr.arpa.174.13.217.172.in-addr.arpa.72888INPTRyul03s04-in-f14.1e100.net。我总是使用-x因为它减少了打字。格式化响应的选项现在,让我们讨论可用于格式化响应的参数。我发现dig默认设置DNS响应格式的方式对初学者来说太难了。输出如下:<<>>DiG9.16.20<<>>-rjvns.ca;;全局选项:+cmd;;得到答案:;;->>HEADER<<-操作码:QUERY,状态:NOERROR,id:28629;;标志:qrrdra;查询:1,答案:1,权限:0,附加:1;;选择伪部分:;EDNS:版本:0,标志:;UDP:4096;曲奇饼:d87fc3022c0604d60100000061ab74857110b908b274494d(好);;问题部分:;jvns.ca。在一个;;答案部分:jvns.ca。276输入172.64.80.1;;查询时间:9毫秒;;服务器:192.168.1.1#53(192.168.1.1);;时间:美国东部时间2021年12月4日星期六09:00:37;;MSGSIZErcvd:80如果你不习惯看这个,你可能需要花一点时间筛选才能找到你要找的IP地址。大多数时候,您只对此响应中的一行感兴趣(jvns.ca.180INA172.64.80.1)。这里有两种我最喜欢的使dig的输出更易于管理的方法:方法1:+noall+answer这告诉dig只打印DNS响应的“answer”部分的内容。以下是查询google.com的NS记录的示例:$dig+noall+answernsgoogle.comgoogle.com。158564在NSns4.google.com.google.com。158564在NSns1.google.com.google。com。158564在NSns2.google.com.google.com。158564在NSns3.google.com。这里的格式是:NAMETTLTYPECONTENTgoogle.com158564INNSns3.google.com。顺便说一句:如果你想知道IN是什么意思,它的意思是“查询类”,代表“互联网互联网”。它基本上只是80年代和90年代的遗物,当时还有其他网络与Internet竞争,例如“chaosnet”。方式二:+short这类似于dig+noall+answer,但是更短:它只显示每条记录的内容。例如:$dig+shortnsgoogle.comns2.google.com.ns1.google.com.ns4.google.com.ns3.google.com。如果你不喜欢dig的默认格式(我不喜欢!),你可以在digrc中设置格式选项,你可以在你的主目录中创建一个.digrc文件,告诉它默认使用不同的格式。我非常喜欢+noall+answer格式,所以我将+noall+answer放在我的~/.digrc中。下面是我使用该配置文件运行digjvns.ca时发生的情况。$digjvns.cajvns.ca.255在172.64.80.1这使得它更容易阅读!如果我想返回所有输出的长格式(我有时会这样做,通常是因为我想查看响应的权威部分的记录),我可以通过运行$dig+alljvns再次获得长答案.cadig+trace我使用的最后一个挖掘选项是+trace。dig+trace模仿DNS解析器在查找域名时所做的工作——它从根名称服务器开始,然后查询下一级名称服务器(例如.com),依此类推,直到它到达该名称的权威名称服务器域名。因此它将进行大约30次DNS查询。(我检查了tcpdump,它似乎对每个根名称服务器的A/AAAA记录进行了2次查找,因此已经进行了26次查找。我不太确定为什么要这样做,因为它应该已经对这些IP进行了硬编码,但是它是。)我发现这对于理解DNS的工作原理很有用,但我认为我从来没有用它解决过问题。为什么使用dig尽管有更简单的DNS查找工具(如dog和host),但我发现自己坚持使用dig。我喜欢dig的地方实际上是我不喜欢dig的地方——它显示了大量的细节!我知道如果我运行dig+all它将显示DNS响应的所有部分。例如,让我们查询jvns.ca的根名称服务器之一。响应有我可能关心的3个部分:答案部分、权威部分和附加部分。$dig@h.root-servers.net。jvns.ca+所有;;得到答案:;;->>HEADER<<-操作码:QUERY,状态:NOERROR,id:18229;;标志:qrrd;查询:1,答案:0,权限:4,附加:9;;警告:已请求递归但不可用;;选择伪部分:;EDNS:版本:0,标志:;UDP:1232;;问题部分:;jvns.ca。在一个;;权威部门:ca。172800INNSc.ca-servers.ca.ca。172800INNSj.ca-servers.ca.ca。172800INNSx.ca-servers.ca.ca。172800INNSany.ca-servers.ca.;;附加部分:c.ca-servers.ca。172800在185.159.196.2j.ca-servers.ca。172800在198.182.167.1x.ca-servers.ca。172800在199.253.250.68any.ca-servers.ca。172800在199.4.144.2c.ca-servers.ca。172800在AAAA2620:10a:8053::2j.ca-servers.ca。172800在AAAA2001:500:83::1x.ca-servers.ca。172800在AAAA2620:10a:80ba::68any.ca-servers.ca。1728002001:500:a7::2;;查询时间:103毫秒;;服务器:198.97.190.53#53(198.97.190.53);;时间:美国东部时间2021年12月4日星期六11:23:32;;MSGSIZErcvd:289dog还显示了“Additional”部分的记录,但没有明确指出哪个是哪个(我猜+意味着它在Additional部分?),但它似乎没有显示记录对于“权威”部分$dog@h.root-servers.net.jvns.caNSca。2d0h00m00sA“c.ca-servers.ca”。NS约。2d0h00m00sA“j.ca-servers.ca”。NS约。2d0h00m00s“x.ca-servers.ca”。NS约。2d0h00m00sA“any.ca-servers.ca”。一个c.ca-servers.ca。2d0h00m00s+185.159.196.2Aj.ca-servers.ca。.167.1一个x.ca-servers.ca。2d0h00m00s+199.253.250.68Aany.ca-servers.ca。2d0h00m00s+199.4.144.2AAAAc.ca-servers.ca。2d0h00m00s+2620:10a:8053::2AAAAj.ca-servers.ca。2d0h00m00s+2001:500:83::1AAAAx.ca-servers.ca。2d0h00m00s+2620:10a:80ba::68AAAAany.ca-servers.ca。2d0h00m00s+2001:500:a7::2和主机似乎只显示“答案”部分的记录(在这种情况下它没有被记录):$hostjvns.cah.root-servers.netUsingdomainserver:Name:h.root-servers.netAddress:198.97.190.53#53Aliases:总而言之,我觉得这些简单的DNS工具还是不错的(我自己还做了一个简单的webDNS工具),找到了一定要用更容易,但这就是为什么我坚持挖掘的原因。drill的输出格式好像和dig很像,也许drill更好!但我还没有真正尝试过。就这样。我最近才了解.digrc,我非常喜欢使用它,所以我希望它能帮助你们中的一些人花更少的时间清理dig的输出!有人在Twitter上指出,如果有一种方法可以让dig显示响应的简短版本,其中还包括响应的状态(如NOERROR、NXDOMAIN、SERVFAIL等),那就太好了。我同意这个观点观点!但是我在手册中没有找到这样的选项。
