Foros del Web » Programando para Internet » Javascript »

Ping con JavaScript

Estas en el tema de Ping con JavaScript en el foro de Javascript en Foros del Web. Hola amigos Hoy vengo a pedirles ayuda con un script para detectar si hay respuesta desde un servidor externo (p.ej www.google.com) Verán: Necesito que lo ...
  #1 (permalink)  
Antiguo 26/08/2011, 18:26
 
Fecha de Ingreso: agosto-2011
Mensajes: 2
Antigüedad: 13 años, 3 meses
Puntos: 0
Ping con JavaScript

Hola amigos

Hoy vengo a pedirles ayuda con un script para detectar si hay respuesta desde un servidor externo (p.ej www.google.com)

Verán: Necesito que lo que haga es enviar una solicitud de ping a google (por ejemplo), y, si hay respuesta, que me devuelva un valor false o true, a partir de ahí yo podré terminar lo que quiero hacer. Cuando lo termine, lo pondré aqui para que lo veáis y lo uséis como queráis.

Saludos, espero vuestra ayuda. Gracias de antemano
  #2 (permalink)  
Antiguo 26/08/2011, 19:05
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 7 meses
Puntos: 1485
Respuesta: Ping con JavaScript

buenas,
en javascript no se puede hacer un ping tal como lo hariamos con herramientas dedicadas al network. primero porque naturalmente javascript es limitado. es decir, javascript no provee funciones para trabajar directamente con la capa de redes. no obstante se puede hacer algo parecido. la idea consiste en enviar una petición al servidor de algún recurso, si el recurso se obtiene entonces el servidor esta en linea. el método más fácil es cargar con javascript una imagen del servidor, y a la misma vez registrar un evento que indique si la imagen a cargado. es el concepto más básico del cual se puede ir elaborando.
javascript ping.

__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #3 (permalink)  
Antiguo 27/08/2011, 13:08
 
Fecha de Ingreso: julio-2011
Ubicación: Zapopan, Jal. MX
Mensajes: 316
Antigüedad: 13 años, 5 meses
Puntos: 32
Respuesta: Ping con JavaScript

Puedes hacer un método usando un iframe invisible, te preparé la siguiente función:

Código Javascript:
Ver original
  1. function ping( URL, FUNCION, ESPERA ) {
  2.  
  3.     if ( ! URL || typeof( FUNCION ) != "function" )
  4.         return false;
  5.  
  6.     var hay_respuesta = false,
  7.           iframe = document.createElement("iframe"),
  8.           tiempo_espera = Number( ESPERA ) || 5000,
  9.           proseguir = function () {
  10.               document.body.removeChild ( iframe );
  11.               FUNCION( hay_respuesta );
  12.           };
  13.  
  14.     with( iframe ) {
  15.         name = "iframe1";
  16.         style.display = "none";
  17.         src = URL;
  18.     }
  19.     iframe.onload = function() { hay_respuesta = true };
  20.  
  21.     document.body.appendChild( iframe );
  22.     setTimeout( proseguir, tiempo_espera );
  23.  
  24. }

Te describo la función ping:

ping ( dirección, función [, espera] )

Parámetros:
- string dirección: dirección del servidor, ya sea un enlace, IP o dominio junto con su protocolo, es decir, http://(el más común). Se hará ping a dirección.

- function función: función que se ejecutará al terminar el ping, tendrá argumentado un parámetro booleano que valida si hay o no respuesta.

- int espera: milisegundos de espera para validar la respuesta del servidor al que se hace ping, si no se póne nada el defectos será 5 segundos. Recomiendo como mínimo de 3 segundos para evitar que retorne false, siendo que probablemente haya respuesta. Todo depende de la velocidad de internet.

Ahora te pongo un ejemplo:
Código Javascript:
Ver original
  1. function z( respuesta ) {
  2.      alert( respuesta );
  3. }
  4. ping( "http://google.com", z, 4000 );
  5. // El resultado sería true.
  6.  
  7. ping( "http://g00gle.com", z, 4000 );
  8. // El resultado sería false.
Saludos.

Última edición por IXtremeLT; 27/08/2011 a las 13:16
  #4 (permalink)  
Antiguo 27/08/2011, 13:44
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 7 meses
Puntos: 1485
Respuesta: Ping con JavaScript

@ixtremelt,
no es por despreciar tu aportación, pero tu código puede devolver un positivo falso según las configuraciones de ISP de cada internauta. por ejemplo, si yo intento poner una url que no existe me devuelve true. esto porque el ISP detecta que el DNS no pudo encontrar la URL y en esos casos devuelve una página generada por el ISP indicando un mensaje. otra forma que recibo un positivo falso es si hay problema de conexión. por ejemplo, si no hay conexión a internet. cuando hago el ping, el navegador carga una página propia indicando que hubo problema con la conexión. nota: hice las pruebas en chrome.

__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #5 (permalink)  
Antiguo 28/08/2011, 00:56
 
Fecha de Ingreso: julio-2011
Ubicación: Zapopan, Jal. MX
Mensajes: 316
Antigüedad: 13 años, 5 meses
Puntos: 32
Respuesta: Ping con JavaScript

Tienes razón, para ello se tendría que configurar el navegador para que no utilize un sistema de redireccionamiento como el del ISP o de esos toolbar que aveces se instalan sin querer.
Pensaba recuperar el location.href cuando cargara el iframe y hacer una comparación con la dirección ingresada por el usuario, pero genera error de permiso al tratar de manipular el dato.
Supongo que hay queda colgado el script porque la seguridad ya es otro tema. Nimodo -.-!
Igual vendría excelente que alguien con más agallas pudiera generar un script más exacto.

Etiquetas: ping
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 13:48.