Linux/Unix dig命令
在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资源记录的常见类型。
以下是最常见的资源记录:
类型 | 目的 | 示例 |
---|---|---|
A | IPv4 IP地址 | 192.168.1.5 或者75.126.153.206 |
AAAA | IPv6 IP地址 | 2607:f0d0:1002:51 :: 4 |
CNAME | 规范名称记录(别名) | s0.theitroad.org 是cdn.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] vc | TCP模式 |
+ [no] tcp | TCP模式,备用语法 |
+ time = ### | 设置查询超时[5] |
+ tries = ### | 设置UDP尝试次数[3] |
+ retry = ### | 设置UDP重试次数[2] |
+ domain = ### | 设置默认域名 |
+ bufsize = ### | 设置EDNS0最大UDP数据包大小 |
+ ndots = ### | 设置NDOTS值 |
+ edns = ### | 设置EDNS版本 |
+ [no] search | 设置是否使用搜索列表 |
+ [no] showsearch | 使用中间结果搜索 |
+ [no] defname | Ditto |
+ [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] identify | ID响应者简短回答 |
+ [no] trace | 从根向下跟踪委派 |
+ [no] dnssec | 请求DNSSEC记录 |
+ [no] nsid | 请求名称服务器ID |
+ [no] multiline | 以扩展格式打印记录 |
+ [no] sonesoa | AXFR仅打印一个soa记录 |