Pergunta

Eu estou em um sistema Linux onde eu não estou autorizado a usar o aplicativo 'ping' (ping: icmp tomada aberta: Operação não permitida). No entanto, o script que estou escrevendo (PHP, mas eu posso usar uma chamada exec () para qualquer script / programa se necessário) precisa para determinar se um host está 'vivo'. Como posso fazer isto sem usar 'ping'?

Foi útil?

Solução

Se o ping não pode fazê-lo, você não pode fazê-lo em um idioma diferente. Aqui é uma analogia que pode ajudá-lo a entender o porquê. Vamos dizer que há um arquivo no sistema de arquivos e você quer ao seu conteúdo. Você corre cat filename e diz cat: filename: Permission denied. Você acha que Perl (ou qualquer outro idioma) será justo melhor do que C fez aqui? Vamos tentar:

#!/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>;

Quando executado contra o arquivo que diz could not open filename: Permission denied. Não importa o idioma que você tentar usar, você está indo para obter Operation not permitted.

Dito isto, existem outros métodos para determinar se uma máquina está viva. Se houver um servidor que é conhecido por estar sempre em execução na máquina, você pode tentar se conectar a ele. Note que você não precisa para terminar a ligação (por exemplo, log in), apenas o fato de que você pode conseguir iniciar a conexão é o suficiente para saber que a caixa é para cima.

Outras dicas

Para fazer um ping (ICMP) você precisa de acesso root.

A única maneira que você tem é fazer um TCP ou UDP ping . Se você quer um exemplo verificar o código de Cacti ou você pode usar hping para fazer isso por você

Ou você pode definir bit SUID no programa "ping" no UNIX;)

http://us2.php.net/manual-lookup.php ? padrão = socket

Mas se você não pode abrir um socket com ping, é improvável que você pode usar qualquer um destes. Fale com o seu provedor de hospedagem.

O Manual PHP dá código fornecido pelo usuário para uma implementação de um ping em PHP . Infelizmente, ele requer acesso root Portanto, não é provável que você vai ser capaz de usar o que quer. Uma alternativa é usar curl e olhar para os valores devolvidos por curl_getinfo () :

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

É longe de ser equivalente a de ping, mas ainda talvez adequado para suas necessidades.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top