Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl:发出Net::ping来检查远程windows计算机(来自linux)无法看到它_Linux_Windows_Perl_Ping - Fatal编程技术网

Perl:发出Net::ping来检查远程windows计算机(来自linux)无法看到它

Perl:发出Net::ping来检查远程windows计算机(来自linux)无法看到它,linux,windows,perl,ping,Linux,Windows,Perl,Ping,我正在使用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”命令使用“ic

我正在使用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;

你不需要根来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;

我没有使用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";
}

我没有使用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";
}

您可以使用简单的套接字脚本检查主机是否有效您可以使用简单的套接字脚本检查主机是否处于活动状态“icmp”协议需要根权限。“icmp”协议需要根权限。