2009-06-18 4 views
0

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

ответ

2

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

#!/usr/bin/perl 

use strict; 
use warnings; 


die "usage: $0 filename" unless @ARGV == 1; 
my $filename = shift; 

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

print while <$fh>; 

При запуске против файла он говорит could not open filename: Permission denied. Независимо от того, какой язык вы пытаетесь использовать, вы получите Operation not permitted.

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

0

http://us2.php.net/manual-lookup.php?pattern=socket

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

0

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

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

Это далеко не эквивалентными свистеть, но все еще может быть подходит для ваших нужд.

1

Для выполнения пинга (ICMP) вам нужен root-доступ.

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

1

Или вы можете установить SUID бит на программе «пинг» на UNIX;)

 Смежные вопросы

  • Нет связанных вопросов^_^