host命令

host命令 #

host命令是一个简单的DNS查询工具,用于将域名转换为IP地址(正向查询)或将IP地址转换为域名(反向查询)。它提供了比nslookup更简洁的输出,但功能比dig少。

语法 #

host [选项] 名称 [服务器]

常用选项 #

选项 描述
-a, -v, --verbose 详细模式,等同于-t ANY
-t, --type=类型 指定查询的记录类型
-c, --class=类 指定查询的类(默认为IN,互联网)
-C, --checkmode 检查模式,禁用递归查询
-d, --debug 启用调试输出
-m, --no-recurse 禁用递归查询
-r, --retry=次数 设置重试次数(默认为1)
-s, --silent 静默模式,不显示进度消息
-T, --tcp 使用TCP而不是UDP
-W, --wait=秒数 设置查询超时时间(默认为10秒)
-4 仅使用IPv4查询传输
-6 仅使用IPv6查询传输
-w 永远等待,无限超时
-l, --list 列出域中的所有主机(区域传送)
-N, --ndots=数字 设置域名中必须有多少个点才被视为绝对域名
-R, --rcode=代码 设置期望的返回码

常见DNS记录类型 #

记录类型 描述
A IPv4地址记录
AAAA IPv6地址记录
CNAME 规范名称记录(别名)
MX 邮件交换记录
NS 名称服务器记录
PTR 指针记录(反向DNS查询)
SOA 权威记录的起始
TXT 文本记录
SRV 服务定位记录
ANY 所有记录类型

安装 #

在某些Linux发行版中,host命令可能不是默认安装的。可以使用以下命令安装:

# Debian/Ubuntu
sudo apt install bind9-host

# CentOS/RHEL
sudo yum install bind-utils

# Fedora
sudo dnf install bind-utils

# Arch Linux
sudo pacman -S bind

常见用法 #

1. 查询域名的IP地址 #

host example.com

输出示例:

example.com has address 93.184.216.34
example.com has IPv6 address 2606:2800:220:1:248:1893:25c8:1946

2. 反向DNS查询(IP地址到域名) #

host 93.184.216.34

输出示例:

34.216.184.93.in-addr.arpa domain name pointer example.com.

3. 查询特定类型的DNS记录 #

host -t MX example.com

输出示例:

example.com mail is handled by 0 example.com.

4. 使用特定的DNS服务器 #

host example.com 8.8.8.8

这会使用Google的公共DNS服务器(8.8.8.8)进行查询。

5. 详细模式(查询所有记录类型) #

host -a example.com

6. 查询名称服务器 #

host -t NS example.com

输出示例:

example.com name server a.iana-servers.net.
example.com name server b.iana-servers.net.

7. 查询IPv6地址 #

host -t AAAA example.com

输出示例:

example.com has IPv6 address 2606:2800:220:1:248:1893:25c8:1946

8. 查询TXT记录 #

host -t TXT example.com

9. 使用TCP而不是UDP #

host -T example.com

10. 禁用递归查询 #

host -r example.com

11. 设置查询超时 #

host -W 5 example.com

这会将查询超时设置为5秒。

12. 列出域中的所有主机(区域传送) #

host -l example.com ns.example.com

注意:大多数DNS服务器不允许区域传送,此命令可能会失败。

实用示例 #

1. 检查域名的所有IP地址 #

host example.com

2. 检查域名的邮件服务器 #

host -t MX example.com

3. 检查域名的名称服务器 #

host -t NS example.com

4. 检查域名的TXT记录(包括SPF、DKIM等) #

host -t TXT example.com

5. 比较不同DNS服务器的响应 #

host example.com 8.8.8.8
host example.com 1.1.1.1

6. 检查DNS传播 #

for server in 8.8.8.8 1.1.1.1 9.9.9.9; do
    echo "=== $server ==="
    host example.com $server
done

7. 检查反向DNS记录 #

host 93.184.216.34

8. 查询特定子域名 #

host subdomain.example.com

9. 检查域名的SOA记录 #

host -t SOA example.com

10. 使用IPv6进行查询 #

host -6 example.com

11. 检查域名是否存在 #

host non-existent-domain.com

如果域名不存在,会返回错误消息。

12. 检查域名的CAA记录(证书颁发机构授权) #

host -t CAA example.com

与其他DNS工具的比较 #

工具 特点
host 简洁的输出,基本功能,易于使用
dig 详细输出,丰富的选项,适合脚本使用,专业DNS工具
nslookup 简单易用,交互模式,跨平台,但功能较少
whois 提供域名注册信息,而不是DNS记录

注意事项 #

  1. host命令的输出格式可能因版本而异。

  2. 某些DNS服务器可能会限制或过滤某些类型的查询,特别是ANY查询。

  3. 默认情况下,host使用系统配置的DNS服务器(通常在/etc/resolv.conf中指定)。

  4. 使用-l选项尝试区域传送时,大多数DNS服务器会拒绝请求,因为这可能会泄露敏感信息。

  5. 在某些情况下,host命令可能无法解析某些特殊的DNS记录类型。

提示 #

  • host命令提供了比dig更简洁的输出,适合快速查询
  • 使用-t选项可以查询特定类型的DNS记录
  • 使用-a选项可以查询所有类型的DNS记录
  • 在排查DNS问题时,尝试使用不同的DNS服务器进行查询
  • 对于更详细的DNS查询结果,考虑使用dig命令
  • 在脚本中使用host命令时,可能需要解析其输出以提取所需信息
  • 使用-W选项可以设置查询超时时间,避免长时间等待
  • 使用-T选项可以强制使用TCP而不是UDP,这在查询大型DNS记录时很有用