Проверка удаленного компьютера

Проблема

Требуется проверить доступность сетевого компьютера. Сетевые и системные программы часто используют для этой цели программу ping.

Решение

Воспользуйтесь стандартным модулем Net::Ping:
use Net::Ping;
$p = Net::Ping->new()
  or die "Can't create new ping object: $!\n";
print "$host is alive" if $p->ping($host);
$p->close;

Комментарий

Проверить работоспособность компьютера сложнее, чем кажется. Компьютер может реагировать на команду ping даже при отсутствии нормальной фунциональности; это не только теоретическая возможность, но, как ни печально, распространенное явление. Лучше рассматривать утилиту ping как средство для проверки доступности компьютера, а не выполнения им своих функций. Чтобы решить последнюю задачу, вы должны попытаться обратиться к его демонам (telnet, FTP, Web, NFS и т. д.).
В форме, показанной в решении, модуль Net::Ping пытается подключиться к эхо-порту UDP (порт 7) на удаленном компьютере, отправить датаграмму и получить эхо-ответ. Компьютер считается недоступным, если не удалось установить соединение, если отправленная датаграмма не была получена или если ответ отличался от исходной датаграммы. Метод ping возвращает true, если компьютер доступен, и false в противном случае.
Чтобы использовать другой протокол, достаточно передать его имя при вызове new. Допустимыми являются протоколы tcp, udp и icmp (записываются в нижнем регистре). При выборе протокола TCP программа пробует подключиться к эхо-порту TCP (порт 7) удаленного компьютера и возвращает true при успешной установке соединения и false в противном случае (в отличие от UDP пересылка данных не выполняется). При выборе ICMP будет использован протокол ICMP, как в команде ping(8). На компьютерах UNIX протокол ICMP может быть выбран только привилегированным пользователем:
# Использовать ICMP при наличии привилегий и TCP в противном случае
$pong = Net::Ping->new( $> ? "tcp" : "icmp" );
(defined $pong)
  or die "Couldn't create Net::Ping object: $!\n";
if ($pong->ping("kingkong.com")) {
  print "The giant ape lives!\n";
} else {
    print "All hail mighty Camera, friend of children!\n";
  }
Ни один из этих способов не является абсолютно надежным. Маршрутизаторы некоторых узлов отфильтровывают протокол ICMP, поэтому Net::Ping сочтет такие компьютеры недоступными даже при возможности подключения по другим протоколам. Многие компьютеры запрещают эхо-сервис TCP и UDP, что приводит к неудачам при опросе через TCP и UDP. Запрет службы или фильтрацию протокола невозможно отличить от неработоспособности компьютера.

См. также




2013-09-10 17:05:19

Proverte kod v komentariyah gde pro list tam oshibki detskie




Оставить комментарий:
Ваше Имя:
Email:
Антибот: *  
Ваш комментарий: