首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Perl:发出Net::ping检查远程windows计算机(来自linux)无法看到它

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

Stack Overflow用户
提问于 2020-04-02 21:48:56
回答 2查看 116关注 0票数 1

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

代码语言:javascript
复制
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桌面是活动的?

提前谢谢。

EN

回答 2

Stack Overflow用户

发布于 2020-04-03 03:24:32

您不应该需要root用户来ping?但想象一下问题是您指定的是TCP而不是ICMP。

试试这个:

代码语言:javascript
复制
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;
票数 0
EN

Stack Overflow用户

发布于 2020-04-07 00:45:48

我没有使用Net::Ping,而是使用"system()“来使用"ping”linux命令:

代码语言:javascript
复制
#! /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";
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60993101

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档