Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > Prueba de conectividad a una IP a través de cmd de Windows

Cordial saludo, necesito hacer una prueba de conectividad a la IP externa 200.75.51.132, he tratado de realizarla con IsReachable pero no es viable por los problemas que se presentan con el protocolo ICMP, traté de hacerlo con sockets pero tampoco funciona, la IP no tiene URL así que tampoco se puede usar URLCOnnection. Decidí implementar un ping de una consola CMD y obtengo la siguiente respuesta.

Ésta es la salida standard del comando:

Haciendo ping a 200.75.51.132 con 32 bytes de datos:

Respuesta desde 200.75.51.132: bytes=32 tiempo=26ms TTL=251

Respuesta desde 200.75.51.132: bytes=32 tiempo=30ms TTL=251

Respuesta desde 200.75.51.132: bytes=32 tiempo=28ms TTL=251

Respuesta desde 200.75.51.132: bytes=32 tiempo=25ms TTL=251

Estad�sticas de ping para 200.75.51.132:

Paquetes: enviados = 4, recibidos = 4, perdidos = 0

(0% perdidos),

Tiempos aproximados de ida y vuelta en milisegundos:

M�nimo = 25ms, M�ximo = 30ms, Media = 27ms

Paquetes: ??


Solo me interesa capturar los paquetes, trato de capturar los datos usando el método contains para que identifique lo que hay en la línea que empieza con la palabra "Paquetes", pero no arroja ningún valor, he probado colocando la primera palabra de la primera línea, es decir, la palabra "Haciendo" y en ese caso si puedo capturar la posiciòn que quiera. Mi código es el siguiente:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {

String s = null;
String responseLine;
try {
String so = System.getProperty("os.name");
String comando;
// Comando para Linux
if (so.equals("Linux"))
comando = "ifconfig";

else
comando = "cmd /c ping 200.75.51.132";

// Se ejecuta el comando
Process p = Runtime.getRuntime().exec(comando);

//BufferedReader inbound = new BufferedReader(new InputStreamReader(p.getInputStream()) );
BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream()));
BufferedReader stdError = new BufferedReader(new InputStreamReader(p.getErrorStream()));

// Se lee la salida del comando
System.out.println("Ésta es la salida standard del comando:\n");
String paquete= " ";


while ((responseLine = stdInput.readLine()) != null) {
System.out.println(responseLine);

if (responseLine.contains("Paquetes ")) {
String[] responseSplit = responseLine.split(" ");
paquete = responseSplit[1];
System.out.println("Paquetes: " + paquete +" ??");

}
}
System.out.println("Paquetes: " + paquete +" ??");


} catch (IOException e) {
System.out.println("Excepción: ");
e.printStackTrace();
// System.exit(-1);

}

JOptionPane.showMessageDialog(null,"Ping Finalizado","Diagnóstico Final", JOptionPane.INFORMATION_MESSAGE);

}

Qúe debo agregar, o que debo corregir para capturar en una variable los datos de la línea de paquetes?

Gracias por cualquier colaboración

octubre 1, 2014 | Unregistered Commenterleo

Ya lo tienes conseguido pero no has ejecutado tu código en modo debug. Si lo ves más despacio tienes un espacio en tu if que hace que no entre nunca por ahí.

if (responseLine.contains("Paquetes ")) {

Y luego si quitamos ese espacio tu split no hace lo que debería porque recupera un blanco en la posicion [1]

String[] responseSplit = responseLine.split(" ");

Lo que recupera es esto

[, , , , Paquetes:, enviados, =, 4,, recibidos, =, 4,, perdidos, =, 0]

como ves hay muchos espacio al principio.

Por lo demás funciona perfectamente.

octubre 1, 2014 | Registered Commenterantuansoft