0

我正在尝试编写一个工具来检查现有 PTR 记录的 IP 地址,然后如果没有 PTR 记录,则执行 ping 以查看它是否响应。

然后如果没有响应,它应该打印一条消息说

这就是我到目前为止所拥有的。

#!/usr/bin/perl
$ping = "100%";
use warnings;
while (defined($line = <>)) {
    chomp($line);
    print `nslookup $line`;
    if ("NXDOMAIN") {
        print `ping -c 1 -w 2.0 $line`;
        if ($ping) {
            print "IP Address '$line' is available.\n"
        }
    }
}

我似乎无法开始工作的是 if 语句,如果文本 NXDOMAIN 在输出中,它会执行 ping。然后,如果 ping 的文本包含 $ping,它会打印以下行。

print "IP Address '$line' is available.\n"

任何帮助将不胜感激。谢谢!

4

3 回答 3

1

你应该使用 perl 的内置库来做你需要的事情。以下是如何使用 perl 实现 ping 的示例:

use Net::Ping;

my @list = ("10.0.0.1", "10.0.0.2", "10.0.0.3");

foreach my $addr (@list) {
    my $p = Net::Ping->new();
    print "IP Address '$addr' is not responsive.\n" if !$p->ping ($addr);
    $p->close();
    }
于 2013-03-08T15:26:18.563 回答
0

$ping不是undef。所以if条件总是返回真!

如果您$ping从那个特定IP的 .

于 2013-03-08T14:34:51.753 回答
0

您需要存储命令返回的值:

# THIS CODE IS UNTESTED, but should get the idea across.
my $nslookupOut = `nslookup $line`;
print $nslookupOut;
if ( $nslookupOut =~ /NXDOMAIN/ ) {
    my $pingOut = `ping -c 1 -w 2.0 $line`;
    print $pingOut;
    if ( $pingOut =~ /$ping/ ) {
        ...
    }
}
于 2013-03-08T14:34:58.207 回答