请求编写脚本/命令:从主机名列表提取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
相关产品推荐
相关产品推荐

