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记录 |
注意事项 #
-
host
命令的输出格式可能因版本而异。 -
某些DNS服务器可能会限制或过滤某些类型的查询,特别是ANY查询。
-
默认情况下,
host
使用系统配置的DNS服务器(通常在/etc/resolv.conf
中指定)。 -
使用
-l
选项尝试区域传送时,大多数DNS服务器会拒绝请求,因为这可能会泄露敏感信息。 -
在某些情况下,
host
命令可能无法解析某些特殊的DNS记录类型。
提示 #
host
命令提供了比dig
更简洁的输出,适合快速查询- 使用
-t
选项可以查询特定类型的DNS记录 - 使用
-a
选项可以查询所有类型的DNS记录 - 在排查DNS问题时,尝试使用不同的DNS服务器进行查询
- 对于更详细的DNS查询结果,考虑使用
dig
命令 - 在脚本中使用
host
命令时,可能需要解析其输出以提取所需信息 - 使用
-W
选项可以设置查询超时时间,避免长时间等待 - 使用
-T
选项可以强制使用TCP而不是UDP,这在查询大型DNS记录时很有用