Iva*_*don 7 command-line awk shell-script
这似乎超出了我目前的技能,因为我已经尝试了一段时间并且没有取得太大进展。
我被要求获取主机和 IP 列表以确保安全,以便对这些服务器进行扫描。hosts.linux服务器上有一个包含所有主机名的主机列表,只是没有 IP。我正在尝试提出一个脚本,该脚本将从该文件中获取这些名称,然后运行诸如host获取 IP的命令之类的命令。
例如,此命令有效:
host csx-svc-spls-06 | awk '{ print $3 }'
Run Code Online (Sandbox Code Playgroud)
它只返回该服务器的 IP。是否可以从文件中读取,让它运行命令,然后将服务器的名称和 IP 地址在一行中导出到一个新文件?
小智 7
我不确定在 dig 上使用 nslookup 的含义,但我认为这可能有效:
for i in `cat linux.hosts`; do nslookup $i | grep ^Name -A1| awk '{print $2}';echo;done > outputfile
Run Code Online (Sandbox Code Playgroud)
dig有一个+short选项可以使它只生成结果 IP 地址,而不生成其他任何内容。
这段代码:
for h in google.com yahoo.com notfound.nosuch; do
printf '%s = ' "$h"
printf '%s' "$(dig +short "$h")" | tr '\n' ,
echo
done
Run Code Online (Sandbox Code Playgroud)
产生输出:
google.com = 108.177.112.102,108.177.112.139,108.177.112.101,108.177.112.138,108.177.112.100,108.177.112.113
yahoo.com = 98.138.252.38,98.139.180.180,206.190.39.42
notfound.nosuch =
Run Code Online (Sandbox Code Playgroud)
相比之下,这段代码:
for h in google.com yahoo.com notfound.nosuch; do
printf "$h = %s\\n" $(dig +short "$h")
done
Run Code Online (Sandbox Code Playgroud)
产生输出:
google.com = 108.177.112.138
google.com = 108.177.112.100
google.com = 108.177.112.101
google.com = 108.177.112.113
google.com = 108.177.112.139
google.com = 108.177.112.102
yahoo.com = 98.139.180.180
yahoo.com = 206.190.39.42
yahoo.com = 98.138.252.38
notfound.nosuch =
Run Code Online (Sandbox Code Playgroud)
要从文件中读取主机名,请将for上述任一代码片段中的行替换为for h in $(cat hostlist.txt); do— 尽管您可能希望添加一些输入验证。由你决定。
随你挑。如果您想要其他格式,请发表评论。
注:如果所有你想要的是IP地址,你不关心其包括在输出的主机名,那么所有你需要的是:
dig +short $(cat hostlist.txt)
Run Code Online (Sandbox Code Playgroud)
但是请记住,此命令将忽略未出现在 DNS 中的任何主机名。