host 是一个用于执行DNS查询的简单工具,它比 dig 和 nslookup 的输出更简洁,适合快速查询DNS信息。host 命令是 BIND 软件包的一部分,功能强大但使用简单。
host 命令通常包含在 dnsutils 或 bind-utils 包中:
sudo apt-get install dnsutils
sudo yum install bind-utils
# CentOS 8+使用dnf
sudo dnf install bind-utils
sudo dnf install bind-utils
sudo pacman -S dnsutils
host -V
host [选项] [名称] [服务器]
| 选项 | 说明 |
|---|---|
-a |
等同于-t ANY,查询所有记录 |
-t 类型 |
指定查询记录类型(A、MX、NS、CNAME等) |
-C |
比较SOA记录中的权威DNS服务器 |
-l |
列出域区的所有主机(需要AXFR权限) |
-v |
详细输出(等同于+multiline) |
-4 |
仅使用IPv4传输 |
-6 |
仅使用IPv6传输 |
-c 类 |
指定查询类(IN、CH、HS等,默认为IN) |
-R 次数 |
设置重试次数(默认0) |
-T |
使用TCP连接(默认使用UDP) |
-W 秒 |
设置等待回复的超时时间 |
-w |
永久等待回复 |
-r |
禁用递归查询 |
-s |
服务器不响应时,不发送下一个请求 |
-N 点数 |
设置点号数量,用于搜索域 |
-m 标志 |
设置内存调试标志 |
-d |
等同于-v,显示调试信息 |
-? |
显示帮助信息 |
# 查询域名的A记录(IPv4地址)
host google.com
# 查询域名的IPv6地址
host -t AAAA google.com
输出示例:
google.com has address 142.250.185.4
google.com has IPv6 address 2404:6800:4004:80e::200e
google.com mail is handled by 10 smtp.google.com.
# 使用Google的公共DNS服务器
host google.com 8.8.8.8
# 使用Cloudflare的DNS服务器
host google.com 1.1.1.1
# 使用本地DNS服务器
host google.com 192.168.1.1
# 查询MX记录(邮件服务器)
host -t MX google.com
# 查询NS记录(域名服务器)
host -t NS google.com
# 查询TXT记录
host -t TXT google.com
# 查询CNAME记录(别名)
host -t CNAME www.github.com
# 查询SOA记录
host -t SOA google.com
# 查询所有记录类型
host -a google.com
# 根据IP地址查询域名
host 8.8.8.8
# 反向查询IPv6地址
host 2404:6800:4004:80e::200e
# 显示详细输出
host -v google.com
# 或使用-d选项
host -d google.com
# 使用TCP连接进行DNS查询
host -T google.com
# TCP查询特定记录类型
host -T -t MX google.com
# 尝试列出域区的所有主机
host -l example.com ns1.example.com
# 比较多个域名服务器的SOA记录
host -C google.com
# 比较特定域名服务器的SOA记录
host -C -t SOA google.com 8.8.8.8
# 设置等待超时时间为10秒
host -W 10 google.com
# 设置重试次数为3次
host -R 3 google.com
# 永久等待回复(不超时)
host -w google.com
简单查询输出:
$ host google.com
google.com has address 142.250.185.4
google.com has IPv6 address 2404:6800:4004:80e::200e
google.com mail is handled by 10 smtp.google.com.
详细模式输出:
$ host -v google.com
Trying "google.com"
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12345
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;google.com. IN A
;; ANSWER SECTION:
google.com. 300 IN A 142.250.185.4
Received 55 bytes from 8.8.8.8#53 in 45 ms
# 快速查找域名的邮件服务器
host -t MX example.com | awk '{print $NF}' | sort -n
# 获取优先级最高的邮件服务器
host -t MX example.com | sort -n | head -1
#!/bin/bash
# 批量查询域名
domains=("google.com" "github.com" "stackoverflow.com")
for domain in "${domains[@]}"; do
echo "=== $domain ==="
host $domain
echo ""
done
# 使用不同DNS服务器查询同一个域名
servers=("8.8.8.8" "1.1.1.1" "9.9.9.9")
domain="example.com"
for server in "${servers[@]}"; do
echo "DNS服务器: $server"
host $domain $server | grep "address"
done
# 批量反向DNS查询
for ip in 8.8.8.8 8.8.4.4 1.1.1.1; do
echo "$ip -> $(host $ip | awk '{print $NF}')"
done
#!/bin/bash
# 简单的DNS监控脚本
DOMAIN="example.com"
DNS_SERVER="8.8.8.8"
LOG_FILE="/var/log/dns_monitor.log"
while true; do
if host $DOMAIN $DNS_SERVER > /dev/null 2>&1; then
echo "$(date): DNS查询正常" >> $LOG_FILE
else
echo "$(date): DNS查询失败" >> $LOG_FILE
fi
sleep 60 # 每分钟检查一次
done
# 尝试区域传输以获取子域名列表
host -l example.com ns1.example.com 2>/dev/null | grep -E "^[a-zA-Z]"
#!/bin/bash
# 检查DNS记录是否已传播
NEW_IP="192.0.2.1"
DOMAIN="example.com"
SERVERS=("8.8.8.8" "1.1.1.1" "9.9.9.9")
for server in "${SERVERS[@]}"; do
resolved_ip=$(host $DOMAIN $server | grep "address" | head -1 | awk '{print $NF}')
if [ "$resolved_ip" = "$NEW_IP" ]; then
echo "✓ $server: 已更新 ($resolved_ip)"
else
echo "✗ $server: 未更新 ($resolved_ip)"
fi
done
| 工具 | 特点 | 适用场景 | 输出示例 |
|---|---|---|---|
| host | 简洁明了,易于阅读,适合快速查询 | 快速DNS查询,脚本处理,简单故障排除 | google.com has address 142.250.185.4 |
| dig | 功能强大,输出详细,支持所有DNS功能 | 高级DNS调试,详细分析,自动化脚本 | ; <<>> DiG 9.11.3 <<>> google.com... |
| nslookup | 交互模式,传统工具,所有系统支持 | 交互式查询,简单调试,兼容性要求 | Server: 8.8.8.8 Address: 8.8.8.8#53... |
| getent hosts | 查询本地hosts文件,简单快速 | 检查本地解析,hosts文件查询 | 142.250.185.4 google.com |
A: 可能的原因和解决方法:
# 测试其他DNS服务器
host google.com 8.8.8.8
host google.com 1.1.1.1
# 测试网络连接
ping -c 3 8.8.8.8
# 检查DNS服务
systemctl status systemd-resolved
A: host 默认输出已经很简洁。如果需要更简洁的输出,可以使用管道配合其他命令:
# 只显示IP地址
host google.com | grep "address" | awk '{print $NF}'
# 只显示邮件服务器
host -t MX google.com | awk '{print $NF}'
A: 可以尝试以下优化:
-W选项设置合理的超时时间-R选项减少重试次数-4选项强制使用IPv4# 使用快速DNS服务器并设置超时
host -W 2 google.com 8.8.8.8
# 减少重试次数
host -R 1 google.com
A: 区域传输(AXFR)是敏感操作,大多数DNS服务器出于安全考虑会禁用此功能。如果需要获取域名的所有记录,可以:
dig ANY查询(但可能不会返回所有记录)-C选项检查DNS服务器的SOA记录一致性