如何在 Linux 上使用 dig 命令如何在 Linux 上使用 dig 命令如何在 Linux 上使用 dig 命令如何在 Linux 上使用 dig 命令
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

如何在 Linux 上使用 dig 命令

Linux dig 命令允许您查询 DNS 服务器并执行 DNS 查找。您还可以找到 IP 地址返回的域。我们会告诉你怎么做!

dig 命令的工作原理

人们使用 Linux dig 命令查询域名系统 (DNS) 服务器。 dig 是 Domain Information Groper 的首字母缩写词。使用 dig,您可以查询 DNS 服务器以获取有关各种 DNS 记录的信息,包括主机地址、邮件交换、名称服务器和相关信息。它旨在成为诊断 DNS 问题的工具。但是,您可以使用它四处浏览并了解有关 DNS 的更多信息,DNS 是保持 Internet 路由流量的中央系统之一。

互联网使用互联网协议 (IP) 地址来识别网络上的“位置”,但人们使用域名。当您在网络浏览器或 SSH 客户端等应用程序中键入域名时,必须将域名转换为实际 IP 地址。这就是域名系统的用武之地。

当您将域名与任何联网程序一起使用时,您的本地路由器无法解析它(除非它是从先前的请求中缓存的)。因此,您的路由器会查询您的互联网服务提供商 (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 bind-tools

开始挖掘

在我们的第一个示例中,我们将返回与域名关联的 IP 地址。通常,多个 IP 地址与一个域名相关联。例如,如果使用负载平衡,这种情况经常发生。

我们使用 +short 查询选项,如下所示,它给了我们一个简洁的响应:

dig linux教程 +short

所有与 linux教程 域关联的 IP 地址都已为我们列出。另一方面,如果我们不使用+short 查询选项,输出会非常冗长。

因此,我们输入以下内容通过 less 进行管道传输:

dig linux教程 | less

输出显示在 less 中,如下所示。

这是完整的清单:

; <<>> DiG 9.11.3-1ubuntu1.11-Ubuntu <<>> linux教程
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12017
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;linux教程. IN A

;; ANSWER SECTION:
linux教程. 3551 IN A 151.101.194.217
linux教程. 3551 IN A 151.101.130.217
linux教程. 3551 IN A 151.101.66.217
linux教程. 3551 IN A 151.101.2.217

;; Query time: 0 msec
;; SERVER: 127.0.0.53#53(127.0.0.53)
;; WHEN: Sun Mar 22 07:44:37 EDT 2020
;; MSG SIZE rcvd: 106

让我们一块一块地剖析它。

标头

首先,让我们看一下标题中的内容:

; <<>> DiG 9.11.3-1ubuntu1.11-Ubuntu <<>> linux教程
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12017
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1

现在,这就是所有这些的含义:

  • 第一行:dig 的版本和被查询的域。
  • 全局选项:如我们所见,您可以使用 dig 同时查询多个域。此行显示已应用于所有域查询的选项。在我们的简单示例中,它只是默认的 +cmd(命令)选项。
  • 操作码:查询:这是请求的操作类型,在本例中是查询。对于反向查询,此值也可以是 iquery,或者如果您只是测试 DNS 系统的状态,则可以是 status。
  • 状态:无错误:没有错误,请求已正确解决。
  • ID:12017:这个随机 ID 将请求和响应联系在一起。
  • 标志:qr rd ra:这些代表query、recursion desired 和recursion available。递归是 DNS 查找的一种形式(另一种是迭代的)。您可能还会看到 AA,它代表权威答案,表示权威名称服务器提供了响应。
  • Query: 1:本次会话中的查询数,是一个。
  • 答案:4:此响应中的答案数,即四个。
  • 权威:0 来自权威名称服务器的答案数,在本例中为零。响应是从 DNS 前身服务器的缓存中返回的。回复中不会有权威部分。
  • 附加:1:有一条附加信息。 (奇怪的是,除非这个值是 2 或更高,否则什么都不会列出。)

选择伪截面

接下来,我们在 Opt Pseudosection 中看到以下内容:

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494

让我们分解一下:

  • EDNS:版本 0:正在使用的 DNS 扩展系统版本。 EDNS 通过扩展用户数据报协议 (UDP) 数据包的大小来传输扩展数据和标志。这由可变大小标志指示。
  • flags:没有使用任何标志。
  • udp:4096:UDP数据包大小。

问题部分

在问题部分,我们看到以下内容:

;; QUESTION SECTION:
;linux教程. IN A

这是什么意思:

  • linux教程:我们正在查询的域名。
  • IN:我们正在进行互联网课程查询。
  • A:除非我们另有说明,dig 将从 DNS 服务器请求 A(地址)记录。

答案部分

答案部分包含我们从 DNS 服务器收到的以下四个答案:

linux教程. 3551 IN A 151.101.194.217
linux教程. 3551 IN A 151.101.130.217
linux教程. 3551 IN A 151.101.66.217
linux教程. 3551 IN A 151.101.2.217

以下是这些答案的含义:

  • 3551:这是生存时间 (TTL),一个 32 位有符号整数,用于保存记录可以缓存的时间间隔。当它过期时,数据必须用于响应请求,直到它被 DNS 服务器刷新。
  • IN:我们进行了 Internet 类查询。
  • A:我们从 DNS 服务器请求 A 记录。

统计科

统计数据是最后一部分,它包含以下信息:

;; Query time: 0 msec 
;; SERVER: 127.0.0.53#53(127.0.0.53) 
;; WHEN: Sun Mar 22 07:44:37 EDT 2020 
;; MSG SIZE rcvd: 106

这是我们得到的:

  • 查询时间:0 毫秒:获得响应所花费的时间。
  • SERVER: 127.0.0.53#53(127.0.0.53) 响应的 DNS 服务器的 IP 地址和端口号。在这种情况下,它指向本地缓存存根解析器。这会将 DNS 请求转发到配置的任何上游 DNS 服务器。在 Manajro 测试计算机上,此处列出的地址是 8.8.8.8#53,这是 Google 的公共 DNS 服务。
  • 时间:美国东部时间 2020 年 3 月 22 日星期日 07:44:37:提出请求时。
  • MSG SIZE rcvd: 106:从 DNS 服务器收到的消息的大小。

有选择性

你不必满足于守口如瓶和喋喋不休这两个极端。 dig 命令允许您有选择地包括或排除结果中的部分。

以下查询选项将从结果中删除该部分:

  • +nocomments:不显示评论行。
  • +noauthority:不显示权限部分。
  • +noadditional:不显示附加部分。
  • +nostats:不显示统计部分。
  • +noanswer:不显示答案部分。
  • +noall:不显示任何内容!

+noall 查询选项通常与上述选项之一结合使用,以在结果中包含一个部分。因此,无需输入一长串查询选项来关闭多个部分,您可以使用 +noall 将它们全部关闭。

然后,您可以使用以下包含的查询选项来重新打开您想要查看的选项:

  • +comments:显示评论行。
  • +authority:显示权限部分。
  • +additional:显示附加部分。
  • +stats:显示统计部分。
  • +answer:显示答案部分。
  • +all:显示所有内容。

我们键入以下内容以发出请求并排除注释行:

dig linux教程 +nocomments

如果我们单独使用 +noall 查询选项,如下所示,我们不会得到任何有用的输出:

dig linux教程 +noall

我们可以有选择地添加我们想看的部分。要添加答案部分,我们键入以下内容:

dig linux教程 +noall +answer

如果我们键入以下内容来打开 +stats,我们还会看到统计信息部分:

dig linux教程 +noall +answer +stats

+noall +answer 组合经常使用。您可以根据需要将其他部分添加到命令行。如果您想避免在每次使用 dig 时都在命令行中键入 +noall +answer,您可以将它们放在一个名为“.digrc”的配置文件中。它位于您的主目录中。

我们键入以下内容以创建一个带有 echo 的内容:

echo "+noall +answer" > $HOME/.digrc

然后我们可以键入以下内容来检查其内容:

cat .digrc

这两个选项现在将应用于 dig 的所有未来使用,如下所示:

dig ubuntu.org
dig linux.org
dig github.com

此 dig 配置文件将用于本文中的其余示例。

DNS 记录

返回给您的 dig 请求的信息是从 DNS 服务器上保存的不同类型的记录中提取的。除非我们要求不同的东西,否则 dig 查询 A(地址)记录。以下是 dig 常用的记录类型:

  • A 记录:将域链接到 IP 版本 4 地址。
  • MX 记录:邮件交换记录将发送到域的电子邮件直接发送到正确的邮件服务器。
  • NS 记录:名称服务器记录将域(或子域)委托给一组 DNS 服务器。
  • TXT 记录:文本记录存储有关域的基于文本的信息。通常,它们可能用于抑制欺骗性或伪造的电子邮件。
  • SOA 记录:开始权限记录可以保存有关域的大量信息。在这里,您可以找到主要名称服务器、责任方、更改时间戳、区域刷新频率以及一系列重试和放弃的时间限制。
  • TTL:生存时间是每个 DNS 记录的设置,指定允许 DNS 前身服务器缓存每个 DNS 查询的时间。当该时间到期时,必须为后续请求刷新数据。
  • ANY:这会告诉 dig 尽可能返回所有类型的 DNS 记录。

指定A记录类型不改变默认动作,即查询地址记录,获取IP地址,如下图:

dig redhat.com A

要查询邮件交换记录,我们使用以下 MX 标志:

dig yahoo.com MX

名称服务器标志返回与顶级域关联的根名称服务器的以下名称:

dig fedora.com NS

要查询权限记录的开始,我们键入以下 SOA 标志:

dig manjaro.com SOA

TTL 标志将向我们显示 DNS 服务器缓存中数据的生存时间。如果我们发出一系列请求,我们会看到生存时间减少到零,然后跳回到它的起始值。

我们键入以下内容:

dig usa.gov TTL

要查看文本记录,我们键入 TX 标志:

dig usa.gov TXT

指定 DNS 服务器

如果您想为您的请求使用特定的 DNS 服务器,您可以使用 at 符号 (@) 将其作为命令行参数传递给 dig。

使用默认 DNS 服务器(见下文),dig 引用位于 127.0.0.53 的本地缓存存根解析器。

dig usa.gov +stats

现在,我们键入以下内容以使用位于 8.8.8.8 的 Google 公共 DNS 服务器:

dig @8.8.8.8 usa.gov +stats

对多个域使用挖掘

我们可以在命令行中将多个域传递给dig,如下所示:

dig ubuntu.org fedora.org manjaro.com

如果您定期检查一组域,您可以将它们存储在一个文本文件中并将其传递给 dig。将依次检查文件中的所有域。

我们的文件名为“domains.txt”。我们将使用 cat 显示其内容,然后使用 -f(文件)选项将其传递给 dig。我们键入以下内容:

cat domains.txt
dig -f domains.txt

反向 DNS 查询

如果您有 IP 地址并想知道它的去向,您可以尝试反向 DNS 查找。如果它解析为在 DNS 服务器上注册的服务器,您可能能够找到它的域。

是否可以取决于 PTR(指针记录)的存在。 PTR 将 IP 地址解析为完全限定的域名。但是,因为这些不是强制性的,所以它们并不总是出现在域中。

让我们看看能否找到 IP 地址 209.51.188.148 将我们带往何处。我们使用 -x(反向查找)选项键入以下内容:

dig -x 209.51.188.148

急! IP 地址解析为 gnu.org。

因为 PTR 是 DNS 记录,而且我们知道 dig 可以请求指定的 DNS 记录,难道我们不能直接让 dig 为我们检索 PTR 吗?是的,我们可以,但这确实需要更多的工作。

我们必须以相反的顺序提供 IP 地址,并在最后加上 .in-addr.arpa,如下所示:

dig ptr 148.188.51.209.in-addr.arpa

我们得到相同的结果;只是需要更多的努力。

你能挖一下它么?

我们每天都使用互联网,好奇的人常常想知道当我们在浏览器中输入网站名称时,魔法是如何发生的。使用 dig,您可以探索网络召唤的过程。

Linux Commands
Files tar · pv · cat · tac · chmod · grep · diff · sed · ar · man · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · join · jq · fold · uniq · journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev · look · strings · type · rename · zip · unzip · mount · umount · install · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · convert · rclone · shred · srm · scp · gzip · chattr · cut · find · umask · wc
Processes alias · screen · top · nice · renice · progress · strace · systemd · tmux · chsh · history · at · batch · free · which · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat · timeout · wall · yes · kill · sleep · sudo · su · time · groupadd · usermod · groups · lshw · shutdown · reboot · halt · poweroff · passwd · lscpu · crontab · date · bg · fg · pidof · nohup · pmap
Networking netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · dig · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw · arping · firewalld

RELATED: Best Linux Laptops for Developers and Enthusiasts

©2015-2025 艾丽卡 support@alaica.com