Проверка удаленного компьютера
Проблема
Требуется проверить доступность сетевого компьютера. Сетевые и системные программы часто
используют для этой цели программу 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. Запрет службы или
фильтрацию протокола невозможно отличить от неработоспособности компьютера.
См. также
Proverte kod v komentariyah gde pro list tam oshibki detskie
Оставить комментарий:
|
|