Пинг из динамического языка без использования пинга

StackOverflow https://stackoverflow.com/questions/1010506

Вопрос

Я в системе Linux, где мне не разрешено использовать приложение ping (ping: icmp open socket: операция не разрешена). Однако сценарий, который я пишу (PHP, но я могу использовать вызов exec () для любого сценария / программы, если это необходимо), должен определить, является ли хост «живым». Как я могу это сделать, не используя «ping»?

Это было полезно?

Решение

Если ping не может этого сделать, вы не можете сделать это на другом языке. Вот аналогия, которая может помочь вам понять, почему. Допустим, в файловой системе есть файл, и вы хотите его содержимое. Вы запускаете cat filename и он говорит, что cat: filename: Permission denied . Как вы думаете, Perl (или любой другой язык) будет лучше, чем C здесь? Давайте попробуем:

#!/usr/bin/perl

use strict;
use warnings;


die "usage: <*> filename" unless @ARGV == 1;
my $filename = shift;

open my $fh, "<", $filename
    or die "could not open $filename: $!\n";

print while <$fh>;

При запуске с файлом сообщается, что не удалось открыть имя файла: разрешение отклонено . Независимо от того, какой язык вы пытаетесь использовать, вы получите Операция не разрешена .

Тем не менее, существуют и другие методы определения, жива ли машина. Если есть сервер, который, как известно, всегда работает на компьютере, вы можете попытаться подключиться к нему. Обратите внимание, что вам не нужно завершать соединение (например, войти в систему), достаточно лишь одного факта, что вы можете успешно инициировать соединение, чтобы знать, что окно установлено.

Другие советы

Чтобы выполнить пинг (ICMP), вам нужен root-доступ.

Единственный способ сделать это - выполнить TCP или UDP-пинг . Если вам нужен пример, проверьте код Cacti или вы можете использовать hping, чтобы сделать это для вас

Или вы можете установить бит SUID в " ping " программа на unix;)

http://us2.php.net/manual-lookup.php ? = шаблон сокета

Но если вы не можете открыть сокет с помощью ping, вряд ли вы сможете использовать любой из них. Поговорите со своим хостинг-провайдером.

Руководство по PHP предоставляет предоставленный пользователем код для реализации пинг в PHP . К сожалению, для этого требуется доступ с правами root, поэтому вряд ли вы сможете его использовать. Один из вариантов - использовать curl и посмотреть на значения, возвращаемые curl_getinfo () :

c = curl_init('http://www.site.com/');
curl_exec($c);
$info = curl_getinfo($ch);

Это совсем не то же самое, что пинг, но все же, возможно, подходит для ваших нужд.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top