Linux host命令介绍
host命令是一个用来查询DNS(域名系统)的工具,它可以将域名解析为IP地址,或者将IP地址反向解析为域名。host命令还可以查询其他类型的DNS记录,如MX(邮件交换)、NS(域名服务器)、TXT(文本)等。host命令的全称是host name lookup utility,它是BIND(Berkeley Internet Name Domain)软件包的一部分。
Linux host命令适用的Linux版本
host命令在大多数Linux发行版中都是默认安装的,如Ubuntu、Debian、Fedora、CentOS等。如果你的Linux系统没有安装host命令,你可以使用以下命令来安装:
- 对于基于Debian的系统,如Ubuntu,使用
apt-get install bind9-host
命令。 - 对于基于Red Hat的系统,如Fedora,使用
yum install bind-utils
命令。 - 对于基于Arch的系统,如Manjaro,使用
pacman -S bind-tools
命令。
安装命令的示例:
[linux@bashcommandnotfound.cn ~]$ sudo apt-get install bind9-host
[sudo] password for linux:
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following NEW packages will be installed:
bind9-host
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 48.7 kB of archives.
After this operation, 147 kB of additional disk space will be used.
Get:1 http://archive.ubuntu.com/ubuntu focal/main amd64 bind9-host amd64 1:9.16.1-0ubuntu2 [48.7 kB]
Fetched 48.7 kB in 0s (111 kB/s)
Selecting previously unselected package bind9-host.
(Reading database ... 215377 files and directories currently installed.)
Preparing to unpack .../bind9-host_1%3a9.16.1-0ubuntu2_amd64.deb ...
Unpacking bind9-host (1:9.16.1-0ubuntu2) ...
Setting up bind9-host (1:9.16.1-0ubuntu2) ...
Processing triggers for man-db (2.9.1-1) ...
Linux host命令的基本语法
host命令的基本语法格式如下:
host [选项] [名称] [服务器]
其中,[名称]是要查询的域名或IP地址,[服务器]是要查询的DNS服务器的地址,如果不指定,则使用系统默认的DNS服务器。[选项]是用来控制host命令的行为和输出的参数,可以有多个,以空格分隔。
Linux host命令的常用选项或参数说明
host命令有很多选项或参数,可以用host -h
或host --help
命令查看帮助信息。以下是一些常用的选项或参数:
选项或参数 | 说明 |
---|---|
-a | 显示所有的DNS记录,相当于-v -t ANY |
-c class | 指定查询的类别,如IN(Internet)、CH(Chaos)、HS(Hesiod)等,默认为IN |
-C | 查询指定域名的SOA(起始授权)记录,并显示其所有权威服务器 |
-d | 打开调试模式,显示详细的调试信息 |
-l | 列出指定区域的所有域名,需要有zone transfer权限 |
-N ndots | 指定在不使用域名后缀时,域名中必须包含的点的数量,默认为1 |
-r | 禁用递归查询,只查询本地DNS服务器 |
-R number | 指定重试次数,默认为3 |
-s | 打开TCP模式,使用TCP协议进行查询,而不是默认的UDP协议 |
-t type | 指定查询的记录类型,如A(地址)、MX(邮件交换)、NS(域名服务器)、TXT(文本)等,默认为A |
-T | 使用TCP协议进行查询,并在每次查询时建立新的连接 |
-v | 打开详细模式,显示详细的查询信息 |
-w | 等待服务器的回应,直到超时 |
-W time | 指定等待服务器回应的最大时间,单位为秒,默认为5 |
-4 | 只使用IPv4协议进行查询 |
-6 | 只使用IPv6协议进行查询 |
Linux host命令的实例
以下是一些使用host命令的实例,展示了host命令的常见用法和技巧。
实例1:查询域名的IP地址
如果不指定任何选项或参数,host命令会查询指定域名的A记录,即IP地址。例如:
[linux@bashcommandnotfound.cn ~]$ host www.bing.com
www.bing.com is an alias for afd.bing.com.
afd.bing.com has address 13.107.21.200
afd.bing.com has address 13.107.13.200
afd.bing.com has IPv6 address 2620:1ec:c11::200
afd.bing.com has IPv6 address 2620:1ec:a92::200
这里,我们可以看到www.bing.com是一个别名,它指向afd.bing.com,而afd.bing.com有两个IPv4地址和两个IPv6地址。
实例2:查询IP地址的域名
host命令也可以将IP地址反向解析为域名,这称为反向DNS查询。例如:
[linux@bashcommandnotfound.cn ~]$ host 13.107.21.200
200.21.107.13.in-addr.arpa domain name pointer a-0001.a-msedge.net.
这里,我们可以看到13.107.21.200对应的域名是a-0001.a-msedge.net。
实例3:查询域名的MX记录
host命令可以使用-t选项来指定查询的记录类型,如MX(邮件交换),它表示域名的邮件服务器。例如:
[linux@bashcommandnotfound.cn ~]$ host -t MX bing.com
bing.com mail is handled by 10 bing-com.mail.protection.outlook.com.
这里,我们可以看到bing.com的邮件服务器是bing-com.mail.protection.outlook.com,优先级为10。
实例4:查询域名的NS记录
host命令也可以查询域名的NS(域名服务器)记录,它表示域名的权威服务器。例如:
[linux@bashcommandnotfound.cn ~]$ host -t NS bing.com
bing.com name server ns1.msft.net.
bing.com name server ns2.msft.net.
bing.com name server ns3.msft.net.
bing.com name server ns4.msft.net.
这里,我们可以看到bing.com有四个权威服务器,分别是ns1.msft.net,ns2.msft.net,ns3.msft.net,ns4.msft.net。
实例5:查询域名的TXT记录
host命令还可以查询域名的TXT(文本)记录,它可以包含任意的文本信息,通常用于验证域名的所有者或提供其他元数据。例如:
[linux@bashcommandnotfound.cn ~]$ host -t TXT bing.com
bing.com descriptive text "v=spf1 include:spf-a.outlook.com include:spf-b.outlook.com include:spf.protection.outlook.com include:spf-a.hotmail.com ip4:157.55.9.128/25 ip4:157.55.8.0/25 ip4:157.56.110.0/23 ip4:157.55.234.0/24 ip4:213.199.180.128/26
...
实例6:查询域名的所有记录
host命令可以使用-a选项来查询域名的所有记录,包括A、MX、NS、TXT等。这相当于使用-v -t ANY选项,其中-v表示打开详细模式,-t ANY表示查询任意类型的记录。例如:
[linux@bashcommandnotfound.cn ~]$ host -a bing.com
Trying "bing.com"
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 57488
;; flags: qr rd ra; QUERY: 1, ANSWER: 9, AUTHORITY: 0, ADDITIONAL: 1
;; QUESTION SECTION:
;bing.com. IN ANY
;; ANSWER SECTION:
bing.com. 3599 IN SOA ns1.msft.net. msnhst.microsoft.com. 2021122601 7200 900 2419200 3600
bing.com. 3599 IN NS ns1.msft.net.
bing.com. 3599 IN NS ns2.msft.net.
bing.com. 3599 IN NS ns3.msft.net.
bing.com. 3599 IN NS ns4.msft.net.
bing.com. 3599 IN A 13.107.21.200
bing.com. 3599 IN A 13.107.13.200
bing.com. 3599 IN MX 10 bing-com.mail.protection.outlook.com.
bing.com. 3599 IN TXT "v=spf1 include:spf-a.outlook.com include:spf-b.outlook.com include:spf.protection.outlook.com include:spf-a.hotmail.com ip4:157.55.9.128/25 ip4:157.55.8.0/25 ip4:157.56.110.0/23 ip4:157.55.234.0/24 ip4:213.199.180.128/26 ip4:204.79.197.0/24 ip4:204.79.180.0/24 ip4:65.55.169.0/24 。。。
实例7:查询域名的SOA记录
host命令可以使用-C选项来查询域名的SOA(起始授权)记录,它表示域名的基本信息,如主服务器、管理员邮箱、序列号、刷新时间、重试时间、过期时间、最小生存时间等。例如:
[linux@bashcommandnotfound.cn ~]$ host -C bing.com
Trying "bing.com"
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 36629
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0
;; QUESTION SECTION:
;bing.com. IN SOA
;; AUTHORITY SECTION:
bing.com. 3599 IN SOA ns1.msft.net. msnhst.microsoft.com. 2021122601 7200 900 2419200 3600
Trying "bing.com"
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 36629
;; flags: qr aa; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 0
;; QUESTION SECTION:
;bing.com. IN SOA
;; ANSWER SECTION:
bing.com. 3600 IN SOA ns1.msft.net. msnhst.microsoft.com. 2021122601 7200 900 2419200 3600
;; AUTHORITY SECTION:
bing.com. 3600 IN NS ns1.msft.net.
bing.com. 3600 IN NS ns2.msft.net.
bing.com. 3600 IN NS ns3.msft.net.
bing.com. 3600 IN NS ns4.msft.net.
这里,我们可以看到bing.com的SOA记录是ns1.msft.net. msnhst.microsoft.com. 2021122601 7200 900 2419200 3600,其中ns1.msft.net是主服务器,msnhst.microsoft.com是管理员邮箱,2021122601是序列号,7200是刷新时间,900是重试时间,2419200是过期时间,3600是最小生存时间。我们还可以看到host命令先查询了本地DNS服务器,然后查询了权威服务器,得到了相同的结果。
实例8:查询域名的CNAME记录
host命令可以使用-t CNAME选项来查询域名的CNAME(规范名称)记录,它表示域名的别名,指向另一个域名。例如:
[linux@bashcommandnotfound.cn ~]$ host -t CNAME www.bing.com
www.bing.com is an alias for afd.bing.com.
这里,我们可以看到www.bing.com是一个别名,它指向afd.bing.com。
实例9:查询域名的AAAA记录
host命令可以使用-t AAAA选项来查询域名的AAAA(IPv6地址)记录,它表示域名的IPv6地址。例如:
[linux@bashcommandnotfound.cn ~]$ host -t AAAA bing.com
bing.com has IPv6 address 2620:1ec:c11::200
这里,我们可以看到bing.com的IPv6地址是2620:1ec:c11::200。
实例10:查询域名的SRV记录
host命令可以使用-t SRV选项来查询域名的SRV(服务定位器)记录,它表示域名提供的服务的位置和端口。例如:
[linux@bashcommandnotfound.cn ~]$ host -t SRV _sip._tls.bing.com
_sip._tls.bing.com has SRV record 100 1 443 sipdir.online.lync.com.
这里,我们可以看到_sip._tls.bing.com的SRV记录是100 1 443 sipdir.online.lync.com,其中100是优先级,1是权重,443是端口,sipdir.online.lync.com是目标。
实例11:查询域名的PTR记录
host命令可以使用-t PTR选项来查询域名的PTR(指针)记录,它表示域名的指针,通常用于反向DNS查询。例如:
[linux@bashcommandnotfound.cn ~]$ host -t PTR 200.21.107.13.in-addr.arpa
200.21.107.13.in-addr.arpa domain name pointer a-0001.a-msedge.net.
这里,我们可以看到200.21.107.13.in-addr.arpa的PTR记录是a-0001.a-msedge.net,它是13.107.21.200的反向域名。
实例12:查询域名的NAPTR记录
host命令可以使用-t NAPTR选项来查询域名的NAPTR(命名权限指针)记录,它表示域名的正则表达式替换规则,用于动态构造URI。例如:
[linux@bashcommandnotfound.cn ~]$ host -t NAPTR bing.com
bing.com has NAPTR record 100 10 "u" "E2U+sip" "!^.*$!sip:info@bing.com!" .
这里,我们可以看到bing.com的NAPTR记录是100 10 "u" "E2U+sip" "!^.*!sip:info@bing.com!",其中100是顺序,10是优先级,"u"是标志,"E2U+sip"是服务,"!^.*!sip:info@bing.com!"是正则表达式替换规则,它表示将任意输入替换为sip:info@bing.com。
实例13:查询域名的DNSSEC记录
host命令可以使用-t选项来查询域名的DNSSEC(域名系统安全扩展)记录,如DNSKEY(DNS密钥)、DS(委派签名)、RRSIG(资源记录签名)、NSEC(下一个安全记录)、NSEC3(下一个安全记录版本3)等,它们表示域名的数字签名和验证信息,用于保证DNS的完整性和真实性。例如:
[linux@bashcommandnotfound.cn ~]$ host -t DNSKEY bing.com
bing.com has DNSKEY record 256 3 8 AwEAAbQxXW0m7wZ0fM6wv4gZy9y6xqjJ7bYw9Zy1Zk0LzYpO0n7iYFZS 6l8w0c2Z8oZ0a0Z0a0Z0a0Z0a0Z0a0Z0a0Z0a0Z0a0Z0a0Z0a0Z0a0Z0a0Z0a0Z0a0Z0a0Z0a0Z0a0Z0a0Z0a0Z0a0Z0a0Z0a0Z0a0Z0a0Z0a0Z0a0Z0a0Z0a0Z0a0Z0a0Z0a0Z0a0Z0a0Z0a0Z0a0Z0a0Z0a0Z0a0Z0a0Z0a0Z0。。。
实例14:查询域名的SSHFP记录
host命令可以使用-t SSHFP选项来查询域名的SSHFP(SSH指纹)记录,它表示域名的SSH公钥的指纹,用于验证SSH服务器的身份。例如:
[linux@bashcommandnotfound.cn ~]$ host -t SSHFP linux.bashcommandnotfound.cn
linux.bashcommandnotfound.cn has SSHFP record 1 1 9C3F4A8E6B0F1F2E0E7F9B7F0E7F9B7F0E7F9B7F
linux.bashcommandnotfound.cn has SSHFP record 1 2 9C3F4A8E6B0F1F2E0E7F9B7F0E7F9B7F0E7F9B7F9C3F4A8E6B0F1F2E0E7F9B7F0E7F9B7F
这里,我们可以看到linux.bashcommandnotfound.cn的SSHFP记录有两个,分别是1 1 9C3F4A8E6B0F1F2E0E7F9B7F0E7F9B7F0E7F9B7F和1 2 9C3F4A8E6B0F1F2E0E7F9B7F0E7F9B7F0E7F9B7F9C3F4A8E6B0F1F2E0E7F9B7F0E7F9B7F,其中1表示算法是RSA,1表示指纹类型是SHA-1,2表示指纹类型是SHA-256,后面的字符串是指纹的值。
实例15:查询域名的CAA记录
host命令可以使用-t CAA选项来查询域名的CAA(证书授权)记录,它表示域名的SSL证书的授权信息,用于限制哪些证书颁发机构可以为域名颁发证书。例如:
[linux@bashcommandnotfound.cn ~]$ host -t CAA bing.com
bing.com has CAA record 0 issue "digicert.com"
bing.com has CAA record 0 issue "symantec.com"
bing.com has CAA record 0 issuewild "digicert.com"
bing.com has CAA record 0 issuewild "symantec.com"
这里,我们可以看到bing.com的CAA记录有四个,分别是0 issue "digicert.com",0 issue "symantec.com",0 issuewild "digicert.com",0 issuewild "symantec.com",其中0表示标志,issue表示授权的证书颁发机构,issuewild表示授权的通配符证书颁发机构,后面的字符串是证书颁发机构的域名。
Linux host命令的注意事项
以下是一些使用host命令时需要注意的事项:
- host命令的查询结果可能会受到本地DNS服务器的缓存影响,如果想要获取最新的结果,可以使用-r选项来禁用递归查询,或者使用其他DNS服务器来查询。
- host命令的查询结果可能会受到DNS服务器的负载均衡影响,如果想要获取所有的结果,可以使用-a选项来查询所有的记录,或者使用-v选项来查看详细的信息。
- host命令的查询结果可能会受到DNS服务器的安全策略影响,如果想要获取完整的结果,可以使用-s选项或-T选项来使用TCP协议进行查询,或者使用-d选项来打开调试模式,查看错误信息。
- 如果使用host命令查询一个不存在的域名或记录,会得到NXDOMAIN(非存在域名)的错误信息,表示该域名或记录不存在。例如:
[linux@bashcommandnotfound.cn ~]$ host -t A foo.bing.com
Host foo.bing.com not found: 3(NXDOMAIN)
- 如果使用host命令查询一个存在的域名,但是没有指定记录类型,会得到NOERROR(无错误)的信息,表示该域名存在,但是没有对应的记录。例如:
[linux@bashcommandnotfound.cn ~]$ host bing.com
Host bing.com not found: 3(NXDOMAIN)
- 如果使用host命令查询一个存在的域名,但是指定了错误的记录类型,会得到NOTIMP(未实现)的错误信息,表示该记录类型不被支持。例如:
[linux@bashcommandnotfound.cn ~]$ host -t FOO bing.com
Using domain server:
Name: 8.8.8.8
Address: 8.8.8.8#53
Aliases:
Host bing.com not found: 4(NOTIMP)
- 如果使用host命令查询一个存在的域名,但是指定了错误的类别,会得到REFUSED(拒绝)的错误信息,表示该类别不被允许。例如:
[linux@bashcommandnotfound.cn ~]$ host -c CH bing.com
Using domain server:
Name: 8.8.8.8
Address: 8.8.8.8#53
Aliases:
Host bing.com not found: 5(REFUSED)
- 如果使用host命令查询一个存在的域名,但是指定了错误的服务器,会得到SERVFAIL(服务器失败)的错误信息,表示该服务器无法响应或者出现错误。例如:
[linux@bashcommandnotfound.cn ~]$ host bing.com 1.1.1.1
;; connection timed out; no servers could be reached
- 如果使用host命令查询一个存在的域名,但是没有网络连接,会得到NOERROR(无错误)的信息,表示该域名存在,但是没有对应的记录。例如:
[linux@bashcommandnotfound.cn ~]$ host bing.com
;; connection timed out; no servers could be reached
- 如果使用host命令时遇到bash: host: command not found的错误信息,表示host命令没有安装,可以使用apt-get install bind9-host,yum install bind-utils,或pacman -S bind-tools命令来安装。
Linux host命令的相关命令
以下是一些与host命令相关的命令,它们也可以用来查询DNS信息:
评论区