【问题标题】:Perl: Check standard output for specific text and perform an actionPerl:检查特定文本的标准输出并执行操作
【发布时间】:2013-03-08 14:24:57
【问题描述】:

我正在尝试编写一个工具来检查现有 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"

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

【问题讨论】:

标签: linux perl dns ping


【解决方案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();
    }

【讨论】:

    【解决方案2】:

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

    # 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/ ) {
            ...
        }
    }
    

    【讨论】:

    • 这正是我所需要的。这对我精通 Perl 大有帮助。谢谢!!
    【解决方案3】:

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

    如果您收到来自特定IP 的否定响应,则需要设置$ping 变量。

    【讨论】:

      猜你喜欢
      • 2020-12-20
      • 2013-08-20
      • 2023-04-04
      • 1970-01-01
      • 2013-04-30
      • 2020-11-24
      • 2012-03-16
      • 2012-08-03
      • 2023-04-04
      相关资源
      最近更新 更多