使用 ksh/bash 从列表中检查 IP 地址

问题描述

我有一个包含以下数据的列表(文本文件):

app1 example1.google.com   
app2 example2.google.com  
dev1 device1.google.com  
cell1 iphone1.google.com

我想检查 URL/主机名的 ip 地址并使用收集的 ip 更新文本文件。示例:

app1 example1.google.com 192.168.1.10  
app2 example2.google.com 192.168.1.55  
dev1 device1.google.com 192.168.1.53  
cell1 iphone1.google.com 192.168.1.199

解决方法

您可以使用 dig 获取 IP(但域必须存在)。未针对 IPv6 进行测试。

#! /bin/bash
while read name url ; do
    ip=$(dig -4 $url | grep '^[^;]' | grep -o '\([0-9]*[.:]\)\+[0-9.:]*$')
    printf '%s %s %s\n' "$name" "$url" "$ip"
done < data.txt
,

如果文件中只有两列,这可能会有所帮助:

awk '{"dig +short " $2 | getline ip ; print $1,$2,ip}' file

首先,我们运行一个子shell(为无数记录运行这个并不是一个好主意),并在其中运行一个“dig +short”(我想到的最短的可能只获得IP地址),FQDN为一台机器(在第二列中找到)。然后我们打印所有原始列和新列(带有 IP 地址)。可以使用单个 > 将输出重定向到新文件。我不会认为编辑原始文件是“安全的”。