Ping de linguagem dinâmica sem o uso de 'ping'
-
06-07-2019 - |
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'?
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.