You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求编写脚本/命令:从主机名列表提取IP并合并至单个文件

我来帮你搞定这个批量解析主机名的脚本!这种给安全团队整理IP清单的需求太常见了,我之前也帮团队写过类似的工具,给你两个直接能用的方案,都是轻量高效的:

方案1:基于host命令的Shell脚本

这个脚本会逐行读取你的hosts.linux文件,用host命令解析IP,最后输出清晰的主机名-IP对应列表,还会标记解析失败的主机:

#!/bin/bash
# 输入文件路径
INPUT_FILE="hosts.linux"
# 输出结果文件(可选,直接打印也可以)
OUTPUT_FILE="hosts_with_ips.txt"

# 先清空输出文件(如果存在)
> "$OUTPUT_FILE"

echo "开始解析主机名..."
while IFS= read -r hostname; do
    # 跳过空行和注释行(如果有的话)
    [[ -z "$hostname" || "$hostname" =~ ^# ]] && continue
    
    # 用host命令仅提取IPv4地址,过滤掉多余输出
    ip=$(host -t A "$hostname" | grep -oP '\b(?:\d{1,3}\.){3}\d{1,3}\b' | head -n 1)
    
    if [[ -n "$ip" ]]; then
        echo "$hostname -> $ip" | tee -a "$OUTPUT_FILE"
    else
        echo "* 解析失败: $hostname" | tee -a "$OUTPUT_FILE"
    fi
done < "$INPUT_FILE"

echo "解析完成!结果已保存到$OUTPUT_FILE"

关键细节说明:

  • host -t A "$hostname":指定只解析IPv4地址(如果需要IPv6可以改成AAAA)
  • grep -oP '\b(?:\d{1,3}\.){3}\d{1,3}\b':用正则精准提取IP地址,避免多余的输出内容
  • tee -a:同时打印到屏幕和写入文件,方便实时查看解析进度
方案2:用dig命令(更稳定,适合大规模解析)

如果你的主机数量很多,dig比host更可靠,还能设置解析超时避免卡住:

#!/bin/bash
INPUT_FILE="hosts.linux"
OUTPUT_FILE="hosts_with_ips.txt"

> "$OUTPUT_FILE"

echo "开始解析主机名..."
while IFS= read -r hostname; do
    [[ -z "$hostname" || "$hostname" =~ ^# ]] && continue
    
    # 用dig快速解析,仅返回IP,超时设为2秒
    ip=$(dig +short +timeout=2 "$hostname" A | head -n 1)
    
    if [[ -n "$ip" ]]; then
        echo "$hostname,$ip" | tee -a "$OUTPUT_FILE"  # 用逗号分隔,方便导入表格工具
    else
        echo "$hostname,解析失败" | tee -a "$OUTPUT_FILE"
    fi
done < "$INPUT_FILE"

echo "解析完成!"
额外小贴士
  • 给脚本加执行权限:chmod +x parse_hosts.sh,然后直接运行./parse_hosts.sh
  • 如果安全团队需要表格格式,可以把输出改成制表符分隔,方便复制到Excel/Google Sheets:echo -e "$hostname\t$ip"
  • 要是遇到大量主机解析慢,可以用xargs -P 5实现并行处理(5是并行数),注意别把DNS服务器打垮

内容的提问来源于stack exchange,提问作者Ivan Windon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:41:48