我正在使用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权限,我负担不起。
有没有人能帮我解决一下为什么"Net::Ping“和"tcp”协议不能看到windows桌面是活动的?
提前谢谢。
发布于 2020-04-03 03:24:32
您不应该需要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;发布于 2020-04-07 00:45:48
我没有使用Net::Ping,而是使用"system()“来使用"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";
}https://stackoverflow.com/questions/60993101
复制相似问题