Foros del Web » Programando para Internet » PHP »

script para hacer ping en php

Estas en el tema de script para hacer ping en php en el foro de PHP en Foros del Web. Buenas tardes, Estoy preparando un script para monitorizar servidores, y me gustaria saber si es posible hacer un script o una funcion en php que ...
  #1 (permalink)  
Antiguo 13/08/2011, 07:54
Avatar de oscarenzo  
Fecha de Ingreso: julio-2007
Ubicación: Barcelona
Mensajes: 167
Antigüedad: 17 años, 5 meses
Puntos: 2
script para hacer ping en php

Buenas tardes,

Estoy preparando un script para monitorizar servidores, y me gustaria saber si es posible hacer un script o una funcion en php que haga ping a un server y devuelva un boleano, por ejemplo

$variable = funcion..

if($variable){echo "servidor con conectividad";}
else{echo "servidor apagado";}

gracias de antemano, un saludo.
  #2 (permalink)  
Antiguo 14/08/2011, 13:58
Avatar de oscarenzo  
Fecha de Ingreso: julio-2007
Ubicación: Barcelona
Mensajes: 167
Antigüedad: 17 años, 5 meses
Puntos: 2
Respuesta: script para hacer ping en php

nadie me podría ayudar :s?
  #3 (permalink)  
Antiguo 14/08/2011, 14:16
Avatar de portalmana  
Fecha de Ingreso: septiembre-2007
Ubicación: Montevideo-Uruguay
Mensajes: 633
Antigüedad: 17 años, 2 meses
Puntos: 80
Respuesta: script para hacer ping en php

Código PHP:
Ver original
  1. <?php
  2.  
  3. $comando = "ping 127.0.0.1";
  4. $output = shell_exec($comando);
  5. echo $output;

Luego tendrías que ver lo que recibes en la variable para ver si conecto o no....
shell_exec


Saludos
__________________
"La imaginación es más importante que el conocimiento. El conocimiento es limitado, mientras que la imaginación no" -- A.Einstein
objetivophp.com,twitter.com/objetivophp
  #4 (permalink)  
Antiguo 14/08/2011, 14:18
Avatar de oscarenzo  
Fecha de Ingreso: julio-2007
Ubicación: Barcelona
Mensajes: 167
Antigüedad: 17 años, 5 meses
Puntos: 2
Respuesta: script para hacer ping en php

gracias portalmana, pero hay alguna manera de identificar en el output, si ha contestado favorable o no? para proceder a realizar alguna accion o no segun sea el caso?

gracias de antemano.
  #5 (permalink)  
Antiguo 14/08/2011, 14:32
Avatar de portalmana  
Fecha de Ingreso: septiembre-2007
Ubicación: Montevideo-Uruguay
Mensajes: 633
Antigüedad: 17 años, 2 meses
Puntos: 80
Respuesta: script para hacer ping en php

Luego en la salida tenes que ver algo que te indique el estado de la ip, por ejemplo supones que si no recibiste ningún paquete esta fuera de linea y si recibio uno o mas esta activo...
Código PHP:
Ver original
  1. <?php
  2. $ip = "http://www.forosdelweb.com";
  3. $output = shell_exec("ping $ip");
  4.  
  5. if (strpos($output, "recibidos = 0")) {
  6.     echo 'No Conectado';
  7. } else {
  8.     echo 'Conectado';
  9. }

Tendrias que afinar un poco mas por algunas posibles respuestas que aquí no están contempladas.
__________________
"La imaginación es más importante que el conocimiento. El conocimiento es limitado, mientras que la imaginación no" -- A.Einstein
objetivophp.com,twitter.com/objetivophp
  #6 (permalink)  
Antiguo 14/08/2011, 14:39
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 13 años, 5 meses
Puntos: 793
Respuesta: script para hacer ping en php

Estas funciones me las encontré un día leyendo todo el manual PHP, tal vez te sirvan:

Código PHP:
Ver original
  1. <?php
  2. function GetPing($ip=NULL) {
  3.  if(empty($ip)) {$ip = $_SERVER['REMOTE_ADDR'];}
  4.  if(getenv("OS")=="Windows_NT") {
  5.   $exec = exec("ping -n 3 -l 64 ".$ip);
  6.   return end(explode(" ", $exec ));
  7.  }
  8.  else {
  9.   $exec = exec("ping -c 3 -s 64 -t 64 ".$ip);
  10.   $array = explode("/", end(explode("=", $exec )) );
  11.   return ceil($array[1]) . 'ms';
  12.  }
  13. }
  14.  
  15. $ip = '190.28.6.20';
  16.  
  17. if (GetPing($ip) == 'perdidos),') {
  18.     echo 'Tiempo agotado';
  19. } else if (GetPing($ip) == '0ms') {
  20.     echo 'servidor apagado';
  21. } else {
  22.     echo 'servidor con conectividad';
  23. }

Código PHP:
Ver original
  1. function ping($host, $timeout = 1) {
  2.     /* ICMP ping packet with a pre-calculated checksum */
  3.     $package = "\x08\x00\x7d\x4b\x00\x00\x00\x00PingHost";
  4.     $socket = socket_create(AF_INET, SOCK_RAW, 1);
  5.     socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array('sec' => $timeout, 'usec' => 0));
  6.     socket_connect($socket, $host, null);
  7.  
  8.     $ts = microtime(true);
  9.     socket_send($socket, $package, strLen($package), 0);
  10.     if (socket_read($socket, 255))
  11.         $result = microtime(true) - $ts;
  12.     else
  13.         $result = false;
  14.     socket_close($socket);
  15.  
  16.     return $result;
  17. }

Código PHP:
Ver original
  1. function hacerPing($ip) {
  2.     $str = exec("ping -n 1 -w 1 $ip", $res, $ret);
  3.     if ($ret == 0) {
  4.         return true;
  5.     }
  6.     return false;
  7. }
  8.  
  9. if (hacerPing('154.0.0.45') === true) {
  10.     echo 'ON <br>' . $res;
  11. } else {
  12.     echo 'OFF <br>' . $res;
  13. }
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #7 (permalink)  
Antiguo 14/08/2011, 15:03
Avatar de oscarenzo  
Fecha de Ingreso: julio-2007
Ubicación: Barcelona
Mensajes: 167
Antigüedad: 17 años, 5 meses
Puntos: 2
Respuesta: script para hacer ping en php

muchas gracias chicos, les agradezco de corazon, voy a probar integrando estas funciones en mi script.

saludos.
  #8 (permalink)  
Antiguo 14/08/2011, 15:25
Avatar de oscarenzo  
Fecha de Ingreso: julio-2007
Ubicación: Barcelona
Mensajes: 167
Antigüedad: 17 años, 5 meses
Puntos: 2
Respuesta: script para hacer ping en php

Cita:
Iniciado por andresdzphp Ver Mensaje
Estas funciones me las encontré un día leyendo todo el manual PHP, tal vez te sirvan:

Código PHP:
Ver original
  1. <?php
  2. function GetPing($ip=NULL) {
  3.  if(empty($ip)) {$ip = $_SERVER['REMOTE_ADDR'];}
  4.  if(getenv("OS")=="Windows_NT") {
  5.   $exec = exec("ping -n 3 -l 64 ".$ip);
  6.   return end(explode(" ", $exec ));
  7.  }
  8.  else {
  9.   $exec = exec("ping -c 3 -s 64 -t 64 ".$ip);
  10.   $array = explode("/", end(explode("=", $exec )) );
  11.   return ceil($array[1]) . 'ms';
  12.  }
  13. }
  14.  
  15. $ip = '190.28.6.20';
  16.  
  17. if (GetPing($ip) == 'perdidos),') {
  18.     echo 'Tiempo agotado';
  19. } else if (GetPing($ip) == '0ms') {
  20.     echo 'servidor apagado';
  21. } else {
  22.     echo 'servidor con conectividad';
  23. }

Código PHP:
Ver original
  1. function ping($host, $timeout = 1) {
  2.     /* ICMP ping packet with a pre-calculated checksum */
  3.     $package = "\x08\x00\x7d\x4b\x00\x00\x00\x00PingHost";
  4.     $socket = socket_create(AF_INET, SOCK_RAW, 1);
  5.     socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array('sec' => $timeout, 'usec' => 0));
  6.     socket_connect($socket, $host, null);
  7.  
  8.     $ts = microtime(true);
  9.     socket_send($socket, $package, strLen($package), 0);
  10.     if (socket_read($socket, 255))
  11.         $result = microtime(true) - $ts;
  12.     else
  13.         $result = false;
  14.     socket_close($socket);
  15.  
  16.     return $result;
  17. }

Código PHP:
Ver original
  1. function hacerPing($ip) {
  2.     $str = exec("ping -n 1 -w 1 $ip", $res, $ret);
  3.     if ($ret == 0) {
  4.         return true;
  5.     }
  6.     return false;
  7. }
  8.  
  9. if (hacerPing('154.0.0.45') === true) {
  10.     echo 'ON <br>' . $res;
  11. } else {
  12.     echo 'OFF <br>' . $res;
  13. }
Hola, he probado el ultimo, que era lo que mas se acomodaba a lo que necesitaba pero me da OFF en todas las peticiones , lo has probado antes, creo que a lo mejor algo esto haciendo mal,
  #9 (permalink)  
Antiguo 14/08/2011, 15:27
Avatar de oscarenzo  
Fecha de Ingreso: julio-2007
Ubicación: Barcelona
Mensajes: 167
Antigüedad: 17 años, 5 meses
Puntos: 2
Respuesta: script para hacer ping en php

Cita:
Iniciado por portalmana Ver Mensaje
Luego en la salida tenes que ver algo que te indique el estado de la ip, por ejemplo supones que si no recibiste ningún paquete esta fuera de linea y si recibio uno o mas esta activo...
Código PHP:
Ver original
  1. <?php
  2. $ip = "http://www.forosdelweb.com";
  3. $output = shell_exec("ping $ip");
  4.  
  5. if (strpos($output, "recibidos = 0")) {
  6.     echo 'No Conectado';
  7. } else {
  8.     echo 'Conectado';
  9. }

Tendrias que afinar un poco mas por algunas posibles respuestas que aquí no están contempladas.
Hola, he probado este, que se me acomoda muy bien, pero me arroja en todos como OK, a pesar de que uno de ellos, era uno que no tenia conectividad, ya que lo he probado con el cmd de windows , podrías ayudarme?
  #10 (permalink)  
Antiguo 14/08/2011, 15:31
Avatar de portalmana  
Fecha de Ingreso: septiembre-2007
Ubicación: Montevideo-Uruguay
Mensajes: 633
Antigüedad: 17 años, 2 meses
Puntos: 80
Respuesta: script para hacer ping en php

Tendrías, que mostrarme las salidas que te han dado los distintos comandos...
__________________
"La imaginación es más importante que el conocimiento. El conocimiento es limitado, mientras que la imaginación no" -- A.Einstein
objetivophp.com,twitter.com/objetivophp
  #11 (permalink)  
Antiguo 14/08/2011, 15:36
Avatar de oscarenzo  
Fecha de Ingreso: julio-2007
Ubicación: Barcelona
Mensajes: 167
Antigüedad: 17 años, 5 meses
Puntos: 2
Respuesta: script para hacer ping en php

hola portalmana, mira he creado una funcion:

Cita:
function comprobarConnServidor($direccion){

//$ip = "http://www.forosdelweb.com";
$output = shell_exec("ping $ip");

if (strpos($output, "recibidos = 0")) {
echo 'No Conectado';
} else {
echo 'Conectado';
}
}
yo le paso como valor la variable direccion, he probado haciendo pong a este este dominio:
dfdsfsdf.com y me arroja como online, sin embargo, por cms me da como que no tiene conectividad.
  #12 (permalink)  
Antiguo 14/08/2011, 15:37
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 13 años, 5 meses
Puntos: 793
Respuesta: script para hacer ping en php

Prueba con esta función:

Código PHP:
Ver original
  1. <?php
  2.  
  3. function pingDomain($domain){
  4.     $starttime = microtime(true);
  5.     $file      = @fsockopen ($domain, 80, $errno, $errstr, 10);
  6.     $stoptime  = microtime(true);
  7.     $status    = 0;
  8.  
  9.     if (!$file) $status = -1;  // Site is down
  10.     else {
  11.         fclose($file);
  12.         $status = ($stoptime - $starttime) * 1000;
  13.         $status = floor($status);
  14.     }
  15.    
  16.     if ($status <> -1) {
  17.         return true;
  18.     }
  19.  
  20.     return false;
  21.    
  22. }
  23.  
  24. if (pingDomain('192.168.0.1')) {
  25.     echo 'ON';
  26. } else {
  27.     echo 'OFF';
  28. }

Sacada de:

http://tournasdimitrios1.wordpress.com/2010/10/15/check-your-server-status-a-basic-ping-with-php/

y sugerida por @abimaelrc
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #13 (permalink)  
Antiguo 14/08/2011, 15:38
Avatar de oscarenzo  
Fecha de Ingreso: julio-2007
Ubicación: Barcelona
Mensajes: 167
Antigüedad: 17 años, 5 meses
Puntos: 2
Respuesta: script para hacer ping en php

Al parecer cometi un fallo al escribirte el code, es asi:

Cita:
function comprobarConnServidor($direccion){

//$ip = "http://www.forosdelweb.com";
$output = shell_exec("ping $direccion");

if (strpos($output, "recibidos = 0")) {
echo 'No Conectado';
} else {
echo 'Conectado';
}
}
gracias, un saludo.
  #14 (permalink)  
Antiguo 14/08/2011, 15:43
Avatar de oscarenzo  
Fecha de Ingreso: julio-2007
Ubicación: Barcelona
Mensajes: 167
Antigüedad: 17 años, 5 meses
Puntos: 2
Respuesta: script para hacer ping en php

Cita:
Iniciado por andresdzphp Ver Mensaje
Prueba con esta función:

Código PHP:
Ver original
  1. <?php
  2.  
  3. function pingDomain($domain){
  4.     $starttime = microtime(true);
  5.     $file      = @fsockopen ($domain, 80, $errno, $errstr, 10);
  6.     $stoptime  = microtime(true);
  7.     $status    = 0;
  8.  
  9.     if (!$file) $status = -1;  // Site is down
  10.     else {
  11.         fclose($file);
  12.         $status = ($stoptime - $starttime) * 1000;
  13.         $status = floor($status);
  14.     }
  15.    
  16.     if ($status <> -1) {
  17.         return true;
  18.     }
  19.  
  20.     return false;
  21.    
  22. }
  23.  
  24. if (pingDomain('192.168.0.1')) {
  25.     echo 'ON';
  26. } else {
  27.     echo 'OFF';
  28. }

Sacada de:

http://tournasdimitrios1.wordpress.c...ping-with-php/

y sugerida por @abimaelrc
, Genial!, esta si me ha funcionado, una preguntita, hay alguna manera de en ves de usar fuera de la funcion la condicion:

Código:
if (pingDomain('192.168.0.1')) {
    echo 'ON';
} else {
    echo 'OFF';
}
de meterlo dentro de la funcion, de tal manera que solo ejecutar la funcion y pasarle el parametro de devuelva con un echo, si off o on?

gracias de antemano nuevamente, un saludo.
  #15 (permalink)  
Antiguo 14/08/2011, 15:43
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 13 años, 5 meses
Puntos: 793
Respuesta: script para hacer ping en php

comprobarConnServidor('http://www.sdfjsdfjhsdfkjfsd.com');

da Conectado

Asi:

Código PHP:
Ver original
  1. <?php
  2. // Function to check response time
  3. function pingDomain($domain){
  4.     $starttime = microtime(true);
  5.     $file      = @fsockopen ($domain, 80, $errno, $errstr, 10);
  6.     $stoptime  = microtime(true);
  7.     $status    = 0;
  8.  
  9.     if (!$file) $status = -1;  // Site is down
  10.     else {
  11.         fclose($file);
  12.         $status = ($stoptime - $starttime) * 1000;
  13.         $status = floor($status);
  14.     }
  15.    
  16.     if ($status <> -1) {
  17.         echo 'Conectado';
  18.     } else {
  19.         echo 'No conectado';
  20.     }
  21.    
  22. }
  23.  
  24. pingDomain('http://www.sdhasdhasdhdsa.com');
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #16 (permalink)  
Antiguo 14/08/2011, 15:46
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 6 meses
Puntos: 1517
Respuesta: script para hacer ping en php

Aparte de lo que te han recomendado, si lo que quieres es verificar si un servidor esta arriba ¿por qué no usas mejor get_headers? http://php.net/manual/en/function.get-headers.php
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #17 (permalink)  
Antiguo 14/08/2011, 15:50
Avatar de oscarenzo  
Fecha de Ingreso: julio-2007
Ubicación: Barcelona
Mensajes: 167
Antigüedad: 17 años, 5 meses
Puntos: 2
Respuesta: script para hacer ping en php

Hola abimaelrc, muchas gracias por la sugerencia, pero eso es si el servicio de apache esta arriba, entonces el codigo sera efectivo, pero si no lo tiene arriba? entonces me dara como que el servidor esta caido no? o me equivoco, perdonen mi ignorancia :s.

Muchas gracias.
  #18 (permalink)  
Antiguo 14/08/2011, 15:55
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 13 años, 5 meses
Puntos: 793
Respuesta: script para hacer ping en php

Eso es lo que mas me gusta de este foro siempre viene algún experto con su solución, creo que esto funciona:

Código PHP:
Ver original
  1. <?php
  2.  
  3. function verifServ($serv) {
  4.     $a = @get_headers($serv);
  5.    
  6.     if (is_array($a)) {
  7.         echo 'ON';
  8.     } else {
  9.         echo 'OFF';
  10.     }
  11. }
  12.  
  13. verifServ('http://www.gosdf54fd85ogle.com');
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #19 (permalink)  
Antiguo 14/08/2011, 15:57
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 6 meses
Puntos: 1517
Respuesta: script para hacer ping en php

Exacto, ¿tu quieres verificar si el servidor web esta arriba o quieres verificar si el servidor completo esta arriba?
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #20 (permalink)  
Antiguo 14/08/2011, 16:05
Avatar de oscarenzo  
Fecha de Ingreso: julio-2007
Ubicación: Barcelona
Mensajes: 167
Antigüedad: 17 años, 5 meses
Puntos: 2
Respuesta: script para hacer ping en php

claro lo que yo queria es comprobar si el servidor esta arriba, no el servicio web, de todas maneras me lo guardo, muchas graciasss abimaelrc.

saludos.
  #21 (permalink)  
Antiguo 14/08/2011, 16:06
Avatar de oscarenzo  
Fecha de Ingreso: julio-2007
Ubicación: Barcelona
Mensajes: 167
Antigüedad: 17 años, 5 meses
Puntos: 2
Respuesta: script para hacer ping en php

Cita:
Iniciado por andresdzphp Ver Mensaje
comprobarConnServidor('http://www.sdfjsdfjhsdfkjfsd.com');

da Conectado

Asi:

Código PHP:
Ver original
  1. <?php
  2. // Function to check response time
  3. function pingDomain($domain){
  4.     $starttime = microtime(true);
  5.     $file      = @fsockopen ($domain, 80, $errno, $errstr, 10);
  6.     $stoptime  = microtime(true);
  7.     $status    = 0;
  8.  
  9.     if (!$file) $status = -1;  // Site is down
  10.     else {
  11.         fclose($file);
  12.         $status = ($stoptime - $starttime) * 1000;
  13.         $status = floor($status);
  14.     }
  15.    
  16.     if ($status <> -1) {
  17.         echo 'Conectado';
  18.     } else {
  19.         echo 'No conectado';
  20.     }
  21.    
  22. }
  23.  
  24. pingDomain('http://www.sdhasdhasdhdsa.com');
Me sirvió esta solución, muchas gracias. Y gracias a todos por el apoyo brindado.

Un saludo.
  #22 (permalink)  
Antiguo 14/08/2011, 16:14
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 6 meses
Puntos: 1517
Respuesta: script para hacer ping en php

En todo caso eso hace lo mismo, verifica que el servidor web esta arriba.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #23 (permalink)  
Antiguo 15/08/2011, 09:08
Avatar de oscarenzo  
Fecha de Ingreso: julio-2007
Ubicación: Barcelona
Mensajes: 167
Antigüedad: 17 años, 5 meses
Puntos: 2
Respuesta: script para hacer ping en php

Hola abimaelrc, si es vdd, ahora lo acabo de ver, no me percate del detalle que el script chequea el puerto 80 :s, como puede hacer una funcion para hacer ping :s, si arroja resultado imprima ON, si no Off.

gracias de antemano, un saludo.
  #24 (permalink)  
Antiguo 15/08/2011, 09:20
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: script para hacer ping en php

Usa la función que te dio andresdzphp, el segundo parámetro es el puerto al que te quieres conectar.

Saludos.
  #25 (permalink)  
Antiguo 15/08/2011, 09:22
Avatar de oscarenzo  
Fecha de Ingreso: julio-2007
Ubicación: Barcelona
Mensajes: 167
Antigüedad: 17 años, 5 meses
Puntos: 2
Respuesta: script para hacer ping en php

Ya he podido corregir el codigo, vi un ejemplo en la página de la funcion en php.

Gracias a todos por la ayuda prestada.

saludos.
  #26 (permalink)  
Antiguo 15/08/2011, 09:23
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 6 meses
Puntos: 1517
Respuesta: script para hacer ping en php

Sigue este ejemplo http://forosdelweb.com/2964998-post2.html
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos

Etiquetas: ping, variables
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:02.