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"
        }
    }
}

私がうまくいかないように見えるのは、テキストNXDOMAINがpingを実行する出力にある場合のifステートメントです。次に、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

$pingundef ではありません。したがって、if条件は常に true を返します。

$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 に答える