Linux下批量解析IP列表主机名及识别未解析IP的方法
解决批量反向解析IP时识别无法解析地址的问题
原脚本仅输出成功解析的主机名,无法关联对应IP,也无法标记解析失败的地址。可以通过以下方式修改脚本,同时保留IP和解析结果,明确区分所有条目的状态:
修改后的脚本
#!/usr/bin/bash while read -r line; do # 跳过空行,避免无效处理 [[ -z "$line" ]] && continue # 执行反向解析并捕获结果 hostname=$(dig +noall +noidnin +answer -x "$line" | awk '{print $5}') # 检查dig命令的退出状态:0表示解析成功,非0表示失败 if [[ $? -eq 0 ]]; then # 处理dig返回成功但无有效主机名的情况(无PTR记录) if [[ -z "$hostname" ]]; then echo "$line: 无法解析" else # 可选:去掉主机名末尾的点(部分dig返回的FQDN会带结尾点) # hostname=${hostname%.} echo "$line: $hostname" fi else echo "$line: 无法解析" fi done < linux.hosts > outputfile
关键修改说明
- 用
read -r读取IP,避免特殊字符导致的解析异常 - 通过
dig的退出状态码($?)判断解析是否成功 - 将IP与解析结果配对输出,方便直接对应查看
- 额外处理"dig执行成功但无PTR记录"的边界情况
- 跳过空行,减少无效输出
修改后,outputfile中每一行都会呈现[IP地址]: [主机名]或[IP地址]: 无法解析的格式,所有IP的解析状态一目了然。
内容的提问来源于stack exchange,提问作者M. Bueso
相关产品推荐
相关产品推荐

