我正在尝试编写一个工具来检查现有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"任何帮助都将不胜感激。谢谢!
发布于 2013-03-08 22:34:58
您需要存储命令返回的值:
# 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-08 23:26:19
您应该使用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-08 22:34:52
$ping不是undef。所以if条件总是返回true!
如果从该特定IP获得否定响应,则需要设置$ping变量。
https://stackoverflow.com/questions/15296195
复制相似问题