Perl:发出Net::ping来检查远程windows机器(从linux)无法查看它



我正在使用Perl脚本(在Linux机器上(检查Windows 10桌面(在同一网络上(是否启动:

use Net::Ping;
$p = Net::Ping("tcp");
print "Host is alive.n" if $p->ping("host_name");
$p->close()

此脚本看不到Windows桌面处于活动状态。然而,当我从终端使用"ping"时,它可以看到Windows桌面并从中接收回声。

深入研究这个问题,我发现"ping"命令使用了"icmp"协议。因此,当我在"Net::Ping"中使用此协议时,它可以看到Windows桌面处于活动状态。然而,使用"icmp"运行它需要root权限,我负担不起。

有人能帮我解决为什么使用"tcp"协议的"Net::Ping"不能将windows桌面视为活动的吗?

提前谢谢。

你不需要root来ping吗?但想象一下,问题是您指定的是TCP而不是ICMP。

试试这个:

use Net::Ping; 
$timeout=5; 
$p=Net::Ping->new("icmp", $timeout) or die bye; 
print "$host is alive n" if $p->ping($host); 
$p->close;

我用"system(("代替Net::Ping使用"Ping"linux命令:

#! /usr/bin/perl
my $cpu = "cpu_name_to_test";
my $rslt = system("ping -q -c 1 $cpu >/dev/null 2>&1");
if (! $rslt) {
print "$cpu is up.n";
} else {
print "$cpu is down!n";
}

最新更新