Linux dig命令允许您查询DNS服务器并执行DNS查找。您还可以找到IP地址返回的域。我们将向您展示如何!
dig命令的工作方式
人们使用Linux dig命令来查询域名系统(DNS)服务器。dig是Domain Information Groper的首字母缩写。使用dig,您可以查询DNS服务器以获取有关各种DNS记录的信息,包括主机地址,邮件交换,名称服务器和相关信息。它旨在成为诊断DNS问题的工具。但是,您可以使用它来四处浏览并了解有关DNS的更多信息,DNS是保持Internet路由流量的中央系统之一。
Internet使用Internet协议(IP)地址来标识Web上的“位置”,但是人们使用域名。当您在Web浏览器或SSH客户端等应用程序中键入域名时 ,必须将某些内容从域名转换为实际IP地址。这就是域名系统的用武之地。
当您将域名与任何连接到Internet的程序一起使用时,本地路由器将无法解析该域名(除非从先前的请求中缓存了该域名)。因此,路由器可以查询Internet服务提供商(ISP)的DNS服务器,或者已配置要使用的任何其他服务器。这些称为DNS前体服务器。
如果DNS服务器最近从同一台计算机上的其他人收到相同的请求,则答案可能在其缓存中。如果是这样,它只是将相同的信息发送回您的程序。
如果DNS前体服务器无法在其缓存中找到域,则它将与DNS 根名称服务器联系。根服务器不会保存将域名解析为IP地址所需的信息,但是会保留可以帮助您处理请求的服务器列表。
根服务器查看您的域名所属的顶级域,例如.COM,.ORG,.CO.UK等。然后,它将处理这些类型的域的顶级域服务器列表发送回DNS前体服务器。然后,DNS前体服务器可以再次向顶级域服务器发出请求。
顶级域服务器将 权威名称服务器 的详细信息(存储域的详细信息)发送回DNS前体服务器。然后,DNS服务器查询托管您最初在程序中输入的域区域的权威名称服务器。权威名称服务器将IP地址发送回DNS服务器,DNS服务器又将其发送回您。
安装挖
dig已安装在我们的Ubuntu 18.04和Fedora 30计算机上。但是,我们必须使用以下命令将其安装在Manjaro 18.04计算机上:
sudo pacman -Sy绑定工具
挖掘入门
在第一个示例中,我们将返回与域名关联的IP地址。通常,多个IP地址与一个域名相关联。例如,如果使用负载平衡,通常会发生这种情况。
我们使用+short查询选项,如下所示,它使我们得到了简洁的响应:
挖howtogeek. + short
为我们列出了与howtogeek.域关联的所有IP地址。另一方面,如果我们不使用+short查询选项,则输出非常冗长。
因此,我们键入以下内容将其通过管道传递less:
挖howtogeek. | 减
输出显示在中less,如下所示。
这是完整的清单:
; << DiG 9.11.3-1ubuntu1.11-Ubuntu << howtogeek.
;; 全局选项:+ cmd
;; 得到了答案:
;; -HEADER <<-操作码:QUERY,状态:NOERROR,ID:12017
;; 标志:qr rd ra; 查询:1,答案:4,权限:0,附加:1
;; 选择伪指令:
; EDNS:版本:0,标志:;udp:65494
;; 问题部分:
; howtogeek.。在一个
;; 解答部分:
howtogeek.。3551在A 151.101.194.217
howtogeek.。3551在A 151.101.130.217
howtogeek.。3551在A 151.101.66.217
howtogeek.。3551在A 151.101.2.217
;; 查询时间:0毫秒
;; 服务器:127.0.0.53#53(127.0.0.53)
;; 时间:2020年3月22日,星期日:07:44:37
;; MSG大小RCV:106
让我们逐一剖析。
标头
首先,让我们看一下Header中的内容:
; << DiG 9.11.3-1ubuntu1.11-Ubuntu << >>
;; 全局选项:+ cmd
;; 得到了答案:
;; -HEADER <<-操作码:QUERY,状态:NOERROR,ID:12017
;; 标志:qr rd ra; 查询:1,答案:4,权限:0,附加:1
现在,这就是所有这些的含义:
• 第一行:查询的版本dig和域。
• 全局选项: 我们将看到,您可以用来dig同时查询多个域。此行显示已应用于所有域查询的选项。在我们的简单示例中,它只是默认的+cmd (命令)选项。
• 操作码:查询:这是所请求的操作类型,在这种情况下为query。该值也可以iquery用于反向查询,或者status 仅用于测试DNS系统的状态。
• 状态:无错误:没有错误,请求已正确解决。
• ID:12017:此随机ID将请求和响应绑定在一起。
• 标志:QR RD RA:这些立场query,recursion desired和recursion available。递归是DNS查找的一种形式(另一种是迭代的)。您可能还会看到AA,代表权威答案,表示权威名称服务器提供了响应。
• 查询:1:此会话中的查询数,是1。
• 答案:4:此响应中的答案数为4。
• 权限:0:来自权威名称服务器的答案数量,在这种情况下为零。该响应是从DNS前体服务器的缓存返回的。答复中将没有权威部分。
• 附加:1: 还有一条附加信息。(奇怪的是,没有列出任何内容,除非此值是两个或更大。)
选择伪切片
接下来,我们在“选择伪”部分中看到以下内容:
;; 选择伪指令:
; EDNS:版本:0,标志:;udp:65494
让我们分解一下:
• EDNS:版本0: 正在使用的DNS扩展系统的版本。EDNS通过扩展用户数据报协议(UDP)数据包的大小来传输扩展的数据和标志。这由可变大小标志指示。
• 标志:未使用任何标志。
• udp:4096: UDP数据包大小。
问题部分
在“问题”部分,我们看到以下内容:
;; 问题部分:
; howtogeek.。在一个
这是什么意思:
• howtogeek.:我们正在查询的域名。
• IN:我们正在进行互联网类查询。
• 答:除非我们另外指定,否则 dig将向DNS服务器请求A(地址)记录。
答案部分
答案部分包含我们从DNS服务器收到的以下四个答案:
howtogeek.。3551在A 151.101.194.217
howtogeek.。3551在A 151.101.130.217
howtogeek.。3551在A 151.101.66.217
howtogeek.。3551在A 151.101.2.217
这些答案的含义如下:
• 3551:这是生存时间(TTL),这是一个32位有符号整数,其中包含可以缓存记录的时间间隔。过期时,必须将数据用于请求的答复中,直到DNS服务器刷新了该数据。
• IN:我们进行了Internet类查询。
• 答:我们要求DNS服务器提供A记录。
统计科
统计信息是最后一部分,其中包含以下信息:
;; 查询时间:0毫秒
;; 服务器:127.0.0.53#53(127.0.0.53)
;; 时间:2020年3月22日,星期日:07:44:37
;; MSG大小RCV:106
这是我们得到的:
• 查询时间:0毫秒:获得响应所花费的时间。
• 服务器:127.0.0.53#53(127.0.0.53):响应的DNS服务器的IP地址和端口号。在这种情况下,它指向本地缓存存根解析器。这会将DNS请求转发到配置的任何上游DNS服务器。在Manajro测试计算机上,此处列出的地址是8.8.8.8#53,这是Google的公共DNS服务。
• 时间:星期三3月22日07:44:37美国东部夏令时间2020:发出请求时。
• MSG大小rcvd:106:从DNS服务器接收的消息的大小。
有选择性
您不必满足于双唇和乱码的两个极端。该dig命令允许您有选择地从结果中包括或排除部分。
以下查询选项将从结果中删除该部分:
• + noments:不显示评论行。
• + noauthority:不显示授权部分。
• + noadditional:不显示其他部分。
• + nostats:不显示“统计信息”部分。
• +否答案:不显示答案部分。
• + noall:什么也不要显示!
+noall通常将查询选项与以上选项之一结合使用,以在结果中包括一个部分。因此,您无需输入一长串查询选项来关闭多个部分,而可以使用+noall它们将其全部关闭。
然后,您可以使用以下包含查询选项将要查看的内容重新打开:
• +评论:显示评论行。
• + authority:显示权限部分。
• +其他:显示其他部分。
• + stats:显示“统计信息”部分。
• + answer:显示答案部分。
• +全部:显示所有内容。
我们输入以下内容进行请求,并排除注释行:
挖howtogeek. +没有评论
如果我们单独使用+noall查询选项,如下所示,我们将不会得到任何有用的输出:
挖howtogeek. + noall
我们可以有选择地添加我们要查看的部分。要添加答案部分,我们输入以下内容:
挖掘howtogeek. + noall + answer
如果输入以下内容打开+stats,我们还将看到“统计信息”部分:
挖掘howtogeek. + noall + answer +统计
该+noall +answer组合经常使用。您可以根据需要将其他部分添加到命令行。如果要避免+noall +answer每次使用时都在命令行上键入 dig,可以将它们放在名为“ .digrc”的配置文件中。它位于您的主目录中。
我们键入以下命令来创建一个具有 echo:
回声“ + noall + answer”> $ HOME / .digrc
然后,我们可以键入以下内容来检查其内容:
猫.digrc
这两个选项现在将应用于的所有将来使用dig,如下所示:
挖ubuntu.org
挖linux.org
挖github.
本文dig的其余示例将使用此 配置文件。
DNS记录
返回到您的dig请求的信息是从DNS服务器上保存的不同类型的记录中提取的。除非我们要求其他内容,否则dig查询A(地址)记录。以下是常用的记录类型dig:
• 一条记录: 将域链接到IP版本4地址。
• MX记录: 邮件交换将发送到域的直接电子邮件记录到正确的邮件服务器。
• NS Record:名称服务器记录将一个域(或子域)委派给一组DNS服务器。
• TXT记录:文本记录存储有关域的基于文本的信息。通常,它们可能被用来禁止欺骗或伪造的电子邮件。
• SOA记录:授权记录的开始可以保存有关该域的许多信息。在这里,您可以找到主要名称服务器,负责方,更改的时间戳记,区域刷新的频率以及重试和放弃的一系列时间限制。
• TTL:生存时间是每个DNS记录的设置,它指定允许DNS前体服务器缓存每个DNS查询多长时间。该时间到期后,必须刷新数据以用于后续请求。
• ANY:这告诉dig您返回可以的所有类型的DNS记录。
指定A记录类型不会更改默认操作,即查询地址记录并获取IP地址,如下所示:
挖redhat. A
要查询邮件交换记录,我们使用以下MX标志:
挖yahoo. MX
名称服务器标志返回与顶级域关联的根名称服务器的以下名称:
挖fedora. NS
要查询授权记录的开始,我们键入以下SOA标志:
dig manjaro. SOA
TTL标志将向我们显示DNS服务器缓存中的数据保留时间。如果我们提出了一系列要求,我们会发现生存时间减少到零,然后跳回其初始值。
我们输入以下内容:
挖usa.gov TTL
要查看文本记录,我们输入TX标志:
挖usa.gov TXT
指定DNS服务器
如果要为请求使用特定的DNS服务器,则可以使用at符号(@)将其dig作为命令行参数传递给。
对于默认的DNS服务器(请参阅下文),请dig在127.0.0.53引用本地缓存存根解析器。
挖usa.gov +统计信息
现在,我们键入以下内容以使用位于8.8.8.8的Google的公共DNS服务器:
挖@ 8.8.8.8 usa.gov + stats
对多个域使用挖掘
我们可以dig在命令行上将多个域传递给,如下所示:
挖ubuntu.org fedora.org manjaro.
如果您定期检查一组域,则可以将它们存储在文本文件中并将其传递给dig。文件中的所有域将被依次检查。
我们的文件称为“ domains.txt”。我们将使用它cat来显示其内容,然后dig使用-f(file)选项将其传递给。我们输入以下内容:
猫domains.txt
挖-f domains.txt
反向DNS查找
如果您有IP地址,并且想知道它的去向,则可以尝试反向DNS查找。如果它解析为在DNS服务器上注册的服务器,则您可能能够找到其域。
是否可以取决于PTR(指针记录)的存在。PTR将IP地址解析为完全限定的域名。但是,由于这些不是强制性的,因此它们并不总是存在于域中。
让我们看看是否可以找到IP地址209.51.188.148将我们带到何处。我们使用-x(反向查找)选项键入以下内容:
挖-x 209.51.188.148
快点!IP地址解析为gnu.org。
因为PTR是DNS记录,并且我们知道dig可以请求指定的DNS记录,所以我们不能只是要求dig为我们检索PTR吗?是的,我们可以,但是还需要做更多的工作。
我们必须以相反的顺序提供IP地址,并.in-addr.arpa在末尾附加如下所示:
挖ptr 148.188.51.209.in-addr.arpa