Linux/Unix dig命令

时间:2020-01-09 10:42:13  来源:igfitidea点击:

在Linux和类似Unix的操作系统上,如何使用dig命令行实用工具查询DNS(域名系统)服务器?
如何使用dig命令查找主机名的IP地址或者IP地址的主机名?

dig命令主要用于查询DNS服务器。
这是用于网络故障排除的有用工具。
它因其"灵活性","易于使用"和对主机命令的"透明输出"而受到欢迎。

Linux和Unix dig命令从根本上用于以下目的:

  • 执行DNS查找。
  • 查找主机地址,IP地址,邮件交换(MX),CNAME,名称服务器等。
  • 验证ISP DNS服务器和Internet连接。
  • 验证垃圾邮件,将记录列入黑名单等。

Linux和Unix dig命令示例

使用dig命令进行DNS查找,并查询DNS名称服务器以获取各种资源记录。

语法

基本语法:

dig Hostname
dig DomaiNameHere
dig @DNS-server-name Hostname
dig @DNS-server-name IPAddress
dig @DNS-server-name Hostname|IPAddress type

其中:

  • " DomaiNameHere"要查询的名称服务器的名称或者IP地址(例如8.8.8.8或者ns1.theitroad.local)。如果未提供DNS服务器名称,则dig命令将使用/etc/resolv.conf文件并使用此处列出的名称服务器。
  • Hostname | IPAddress要使用DNS服务器名称查找的资源记录的名称。
  • type设置查询的类型,例如A,MX,NS等。

DNS记录类型列表

使用dig命令之前,您应该了解DNS资源记录的常见类型。
以下是最常见的资源记录:

类型目的示例
AIPv4 IP地址192.168.1.5或者75.126.153.206
AAAAIPv6 IP地址2607:f0d0:1002:51 :: 4
CNAME规范名称记录(别名)s0.theitroad.orgcdn.theitroad.com的别名
MX电子邮件服务器主机名smtp.theitroad.local或者mx1.theitroad.com
NS名称(DNS)服务器名称ns1.theitroad.local或者ns-243.awsdns-30.com
PTR指向规范名称的指针。通常用于实现反向DNS查找82.236.125.74.in-addr.arpa
SOA有关DNS区域的权威信息请参见下文
TXT文本记录请参见下文

默认情况下,dig命令仅查找A记录。
让我们详细了解Linux和Unix dig命令示例。

dig命令示例

要查找主机" www.theitroad.local"的IP地址,请执行:

dig www.theitroad.local

了解dig命令输出

上面是对单个主机www.theitroad.local的简单查询。

dig命令显示大量信息。
让我们尝试了解默认的dig命令输出:

  • "问题"部分显示查询类型。默认情况下,查询是针对" A"(互联网地址)。在此示例中,我使用dig命令查找www.theitroad.local的IP地址。
  • 接下来,您将在"答案部分"中获得查询的答案,www.theitroad.local的地址为75.126.153.206。
  • dig命令的最后一部分包含有关查询的统计信息(" stats section"),例如名称服务器名称,查询时间等。

如何查询其他名称服务器,例如ns1.example.com?

执行以下命令:

dig @ns1.example.com Hostname
dig @ns1.example.com IPAddress
dig @ns1.yahoo.com yahoo.com
dig @clay.ns.cloudflare.com www.theitroad.local
dig @ns-1652.awsdns-14.co.uk. www.theitroad.com

输出示例("统计信息"部分中的注释205.251.198.116):

; <<>> DiG 9.11.5-P4-5.1ubuntu2.1-Ubuntu <<>> @ns-1652.awsdns-14.co.uk. www.theitroad.com
; (2 servers found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 62751
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 1
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.theitroad.com.		IN	A

;; ANSWER SECTION:
www.theitroad.com.	86400	IN	A	72.14.186.145

;; AUTHORITY SECTION:
theitroad.com.		86400	IN	NS	ns-1287.awsdns-32.org.
theitroad.com.		86400	IN	NS	ns-1652.awsdns-14.co.uk.
theitroad.com.		86400	IN	NS	ns-475.awsdns-59.com.
theitroad.com.		86400	IN	NS	ns-761.awsdns-31.net.

;; Query time: 74 msec
;; SERVER: 205.251.198.116#53(205.251.198.116)
;; WHEN: Wed Apr 08 22:59:43 IST 2020
;; MSG SIZE  rcvd: 198

如何选择DNS查询类型?

dig将让您查询类型。
基本语法为:

dig Hostname|IPAddress type
dig @ns-server-here Hostname|IPAddress type
dig Hostname|IPAddress type
dig [+options] @ns-server-here Hostname|IPAddress type

查找主机名的IP地址(A)

dig www.theitroad.local A
dig @ns-1075.awsdns-06.org www.theitroad.local A
dig +short www.theitroad.local A

查找IP地址的主机名

dig 74.125.236.167

查找域名/主机名的MX(邮件交换)

dig theitroad.local MX
dig @ns-1075.awsdns-06.org theitroad.local MX
dig +short theitroad.local MX

查找域名的NS(名称服务器)

dig theitroad.local NS
dig @ns-1075.awsdns-06.org theitroad.local NS
dig +short theitroad.local NS

查找域名的TXT(文本注释)

dig google.com TXT
dig +short google.com TXT
dig @8.8.8.8 google.com TXT

任何查询,即尝试所有查询以获取尽可能多的信息

您也可以尝试ANY查询,如下所示:

dig theitroad.local ANY
dig +short theitroad.local ANY
dig @8.8.8.8 theitroad.local ANY

显示DNS区域名称的SOA记录

Unix dig命令示例的语法如下:

dig theitroad.local SOA
dig @8.8.8.8 theitroad.local SOA

或者尝试:

dig theitroad.local +nssearch

如何执行反向DNS查找?

要将地址映射到名称(反向查找),请按如下所示传递-x选项:

dig -x ip-address-here
dig @ns-name-server -x ip-address-here
dig -x 75.126.153.206
dig +short -x 75.126.153.206

输出示例:

www.theitroad.local.

如何得到长或者短的答案?

要获得简短答案,请按如下所示通过+ short选项:

dig +short query
dig +short theitroad.local NS
dig @8.8.8.8 +short theitroad.local NS

默认情况下,dig显示长答案。
您可以通过以下其他选项来获得调整好的答案:

dig +multiline +noall +answer +nocmd theitroad.local ANY

批处理方式:从文件中读取主机名

首先创建一个文本文件,其中包含查询数量,使用cat命令每行一个:

cat > lookup.txt
+short yahoo.com mx
+short google.com mx
+short theitroad.local mx

传递-f lookup.txt选项使dig在批处理模式下运行:

dig -f /path/to/lookup.txt
dig -f lookup.txt

调试提示:跟踪DNS路径

您可以强制Unix dig命令遵循根名称服务器的委派路径来查找名称。
语法为:

dig +trace theitroad.local
dig +short +trace theitroad.local
dig +short +trace s0.theitroad.org

找出DNS记录的TTL(生存时间)值

生存时间(TTL)是一种机制,用于限制域名系统(DNS)中dns记录的生存期。
它是由权威DNS服务器为特定资源记录设置的。

TTL以秒为单位设置,缓存(递归)dns服务器使用它来加快dns名称解析的速度。
找出TTL的语法如下:

dig +nocmd +noall +answer +ttlid a example.com
dig +nocmd +noall +answer +ttlid A www.theitroad.local

设置IPv4或者IPv6查询传输模式

传递-4选项强制挖掘仅使用IPv4查询传输:

dig -4 query ...

传递-6选项强制挖掘仅使用IPv6查询传输:

dig -6 query ..

如何为DNS查询指定端口号

默认情况下,dig命令使用默认端口TCP或者UDP 53发送查询。
我们可以在非标准端口号(例如5053)上发送查询,如下所示:

dig -p {PORT} query
dig -p 53 @1.1.1.1 www.theitroad.local
dig -p 5053 www.theitroad.local @127.0.0.1
dig +short -p 5053 theitroad.com @127.0.0.1

默认的行为是使用UDP端口53。
我们可以使用+ [no] tcp标志来控制TCP或者UDP协议。
请注意,所有AXFR查询始终使用TCP:

dig +tcp query @ns1
dig +tcp www.theitroad.local @8.8.8.8
dig +tcp www.theitroad.local @fay.ns.cloudflare.com

dig命令选项

以下是Linux或者类似Unix的操作系统上dig命令的所有重要选项的摘要:

命令行选项用法
-x dot-notation用于反向查找的快捷方式
-i使用IP6.INT进行IPv6反向查找
-f filename批处理模式
-b address[#port]绑定到源地址/端口
-p port指定端口号
-q name指定查询名称
-t type指定查询类型
-c class指定查询类
-k keyfile指定tsig密钥文件
-y [hmac:] name:key指定已命名的base64 tsig密钥
-4仅使用IPv4查询传输
-6仅使用IPv6查询传输
-m启用内存使用调试

dig命令查询选项

dig命令具有许多查询选项。
每个查询选项都由一个关键字加一个加号(+)标识。
一些关键字设置或者重置选项。
可以在它们前面加上字符串" no"以否定该关键字的含义。
其他关键字为诸如超时间隔之类的选项分配值。
它们的格式为" +关键字=值"。
查询选项为:

选项用法
+ [no] vcTCP模式
+ [no] tcpTCP模式,备用语法
+ time = ###设置查询超时[5]
+ tries = ###设置UDP尝试次数[3]
+ retry = ###设置UDP重试次数[2]
+ domain = ###设置默认域名
+ bufsize = ###设置EDNS0最大UDP数据包大小
+ ndots = ###设置NDOTS值
+ edns = ###设置EDNS版本
+ [no] search设置是否使用搜索列表
+ [no] showsearch使用中间结果搜索
+ [no] defnameDitto
+ [no] curse递归模式
+ [no] ignore对于TC响应,不还原为TCP。
+ [no] fail不要在SERVFAIL上尝试下一个服务器
+ [no] besteffort甚至试图分析非法消息
+ [no] aaonly在查询中设置AA标志+ [no] aaflag
+ [no] adflag在查询中设置广告标志
+ [no] cdflag在查询中设置CD标志
+ [no] cl控制记录中类的显示
+ [no] cmd控制命令行显示
+ [no] comments控制注释行的显示
+ [no] question控制问题的显示
+ [no] answer控制显示答案
+ [no] authority控制权限显示
+ [no] additional控制显示其他
+ [no] stats控制统计信息的显示
+ [no] short禁用除答案简短形式之外的所有内容
+ [no] ttlid控制记录中ttl的显示
+ [no] all设置或者清除所有显示标志
+ [no] qr发送前打印问题
+ [no] nssearch搜索所有权威名称服务器
+ [no] identifyID响应者简短回答
+ [no] trace从根向下跟踪委派
+ [no] dnssec请求DNSSEC记录
+ [no] nsid请求名称服务器ID
+ [no] multiline以扩展格式打印记录
+ [no] sonesoaAXFR仅打印一个soa记录