Pregunta

Estoy en un sistema Linux donde no se me permite usar la aplicación 'ping' (ping: socket abierto icmp: operación no permitida). Sin embargo, el script que estoy escribiendo (PHP, pero puedo usar una llamada exec () a cualquier script / programa si es necesario) necesita determinar si un host está 'vivo'. ¿Cómo puedo hacer esto sin usar 'ping'?

¿Fue útil?

Solución

Si ping no puede hacerlo, no puede hacerlo en un idioma diferente. Aquí hay una analogía que puede ayudarte a entender por qué. Supongamos que hay un archivo en el sistema de archivos y desea su contenido. Ejecutas cat filename y dice cat: filename: Permiso denegado . ¿Crees que Perl (o cualquier otro lenguaje) será bastante mejor que C aquí? Probemos:

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

Cuando se ejecuta contra el archivo dice no se pudo abrir el nombre del archivo: Permiso denegado . No importa qué idioma intente usar, obtendrá Operación no permitida .

Dicho esto, hay otros métodos para determinar si una máquina está viva. Si se sabe que un servidor siempre se ejecuta en la máquina, puede intentar conectarse a él. Tenga en cuenta que no necesita finalizar la conexión (por ejemplo, iniciar sesión), solo el hecho de que puede iniciar con éxito la conexión es suficiente para saber que el cuadro está activo.

Otros consejos

Para hacer un ping (ICMP) necesita acceso root.

La única forma que tiene es hacer un ping TCP o UDP . Si desea un ejemplo, verifique el código de Cacti o puede usar hping para hacerlo por usted

O puede establecer el bit SUID en "ping" programa en unix;)

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

Pero si no puede abrir un socket con ping, es poco probable que pueda usar alguno de estos. Hable con su proveedor de alojamiento.

El Manual PHP proporciona el código proporcionado por el usuario para la implementación de un ping en PHP . Desafortunadamente, requiere acceso de root, por lo que tampoco es probable que pueda usarlo. Una alternativa es usar curl y mirar los valores devueltos por curl_getinfo () :

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

De ninguna manera es equivalente a hacer ping, pero aún así puede ser adecuado para sus necesidades.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top