use*_*496 2 perl regular-expression
Linuxhost
命令返回:
hostA.domain.com has address xx.xxx.xxx.xx
Run Code Online (Sandbox Code Playgroud)
如何仅获取 IP 地址并将其放入$ipaddr
变量中?
open(FILE, "hostlist.txt") or die("Unable to open file");
@hostnames = <FILE>;
close(FILE);
foreach $hostname (@hostnames)
{
$lookup = qx(host $hostname);
$ipaddr = grep ip_address $lookup; <---- need help here
print $ipaddr;
}
Run Code Online (Sandbox Code Playgroud)
小智 5
由于您在 Unix & Linux 站点而不是 StackOverflow 上发布了此内容,因此我想知道这样的内容是否不是您要查找的内容:
cat hostlist.txt | xargs resolveip -s
Run Code Online (Sandbox Code Playgroud)
但这只会返回一个 IP 地址。
一些主机名将有多个与之关联的 IP 地址:
$ host www.google.com
www.google.com is an alias for www.l.google.com.
www.l.google.com has address 74.125.227.18
www.l.google.com has address 74.125.227.17
www.l.google.com has address 74.125.227.16
www.l.google.com has address 74.125.227.20
www.l.google.com has address 74.125.227.19
Run Code Online (Sandbox Code Playgroud)
要仅获取 IP 列表,一种方法是:
host <hostname> | grep "has address" | awk '{print $4}'
Run Code Online (Sandbox Code Playgroud)
如果您想坚持使用 Perl,请使用 resolveip:
$ipaddr = qx(resolveip -s $hostname);
Run Code Online (Sandbox Code Playgroud)
或者在不执行任何 shell 命令的情况下获取所有 IP:
use Socket;
@ipaddrs = map { inet_ntoa($_) } (gethostbyname($hostname))[4,];
Run Code Online (Sandbox Code Playgroud)