jueves, 22 de diciembre de 2016

Hacer ping con HTML y JavaScript

Navegando en internet en encontrado extractos de código HTML y JAVASCRIPT para hacer una aplicación que hace ping (como en la consola de comandos /CMD)  a una IP, un nombre de equipo (Hostname) o a una URL. Lo he modificado para que parezca mas una consola de comandos y le he cambiado algo de código a mi gusto, además de ponerlo en español.

>> MIRA EL EJEMPLO <<

1. Este es el código HTML
<html>
<head>
<script>

 //código javascript

</script>
</head>
<body>
<div id="cuerpo">
<p><br/> Introduce una IP, nombre de equipo o URL.
</p>
<form id="direccion">
  <input type="text" id="ip" value=""/>
  <input type="button" value="Ping" onClick="comprobar()"/>
</form>
<div id="result"></div>
</div>
</body>
</html>

2. Este es el código JAVASCRIPT
function comprobar(){
 if(document.getElementById('ip').value == "" || document.getElementById('ip').value.length == 0){
  alert("Introduce IP/HOSTNAME/URL.");
  document.getElementById('ip').focus;
 }else{ http_ping() }
}
function http_ping() {

var fqdn = document.getElementById('ip').value;
var NB_ITERATIONS = 4; // numero de loops
var MAX_ITERATIONS = 5; // XMLHttpRequest esta limitado según el navegador
var TIME_PERIOD = 1000; // 1000 ms entre cada ping
var i = 0;
var over_flag = 0;
var time_cumul = 0;
var REQUEST_TIMEOUT = 9000;
var TIMEOUT_ERROR = 0;

document.getElementById('result').innerHTML = " Haciendo ping a " + fqdn + " con 32 bytes de datos:";

var ping_loop = setInterval(function() {


        // para evitar URLs inexistentes
        url = "http://" + fqdn + "/a30Fkezt_77" + Math.random().toString(36).substring(7);

        if (i < MAX_ITERATIONS) {

            var ping = new XMLHttpRequest();

            i++;
            ping.seq = i;
            over_flag++;

            ping.date1 = Date.now();

            ping.timeout = REQUEST_TIMEOUT; 

            ping.onreadystatechange = function() { 

                if (ping.readyState == 4 && TIMEOUT_ERROR == 0) {

                    over_flag--;
 
                    if (ping.seq > 1) {
                        delta_time = Date.now() - ping.date1;
                        time_cumul += delta_time;
                        document.getElementById('result').innerHTML += " Respuesta desde " + fqdn + "  bytes=32 secuencia_http=" + (ping.seq-1) + " tiempo=" + delta_time + " ms";
                    }
                }
            }


            ping.ontimeout = function() {
                TIMEOUT_ERROR = 1;
            }

            ping.open("GET", url, true);
            ping.send();

        }

        if ((i > NB_ITERATIONS) && (over_flag < 1)) { 

            clearInterval(ping_loop);
            var avg_time = Math.round(time_cumul / (i - 1));
     
            document.getElementById('result').innerHTML += "  Estadísticas de ping para " + fqdn + ":    Paquetes: enviados = " + (i-1) + ", recibidos = " + (i-1) + ", perdidos = 0 
    Tiempo aproximado de ida y vuelta en milisegundos: " + avg_time + "ms ";
     alert(tiempoTotal);

        }

        if (TIMEOUT_ERROR == 1) { 

            clearInterval(ping_loop);
            document.getElementById('result').innerHTML += "
 Respuesta desde " + fqdn + ": Host de destino inaccesible. 
";
            return;

        }

    }, TIME_PERIOD);
}

Un saludo.

4 comentarios:

  1. buenas noches, probé el código y el mismo no funciona.solo coloqué el ip 192.168.0.1 que debería dar ok. y al cambiarlo a 192.168.1.1 deberia dar error. en ninguno de los 2 casos no hace nada. solo queda la pantalla con la solicitud del ip.

    ResponderEliminar
  2. Solucion: hacer copia en un editor y eliminar las separaciones de las lineas que inician en...
    document.getElementById('result')......
    document.getElementById('result')....

    ResponderEliminar
  3. Me ha sido muy útil, agradezco el aporte!!!!

    ResponderEliminar
  4. tremendo tu aporte!!! genial!!!

    ResponderEliminar