Perl: выдача Net :: ping для проверки удаленного компьютера windows (из linux) не может его увидеть - PullRequest
1 голос
/ 02 апреля 2020

Я использую сценарий 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 рабочий стол как живой?

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 06 апреля 2020

Вместо 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";
}
0 голосов
/ 02 апреля 2020

Вам не нужно root, чтобы пинговать? Но представьте, что проблема в том, что вы указываете 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;
...