2010-04-13 19 views
6

Java no tiene primitivas para ICMP y traceroute. ¿Cómo superar esto? Básicamente estoy construyendo código que debería ejecutarse en * nix y Windows, y necesito un código que se ejecutará en ambas plataformas.Cómo ICMP y traceroutes en Java

Respuesta

4

Esto es lo que escribí hoy para "implementar" el comando trace route en Java. Solo he probado en Windows, pero también debería funcionar en Linux, aunque hay varias herramientas de traceroute disponibles para Linux, por lo que es muy probable que haya algunos controles para la existencia de esos programas.

public class NetworkDiagnostics{ 
    private final String os = System.getProperty("os.name").toLowerCase(); 

    public String traceRoute(InetAddress address){ 
    String route = ""; 
    try { 
     Process traceRt; 
     if(os.contains("win")) traceRt = Runtime.getRuntime().exec("tracert " + address.getHostAddress()); 
     else traceRt = Runtime.getRuntime().exec("traceroute " + address.getHostAddress()); 

     // read the output from the command 
     route = convertStreamToString(traceRt.getInputStream()); 

     // read any errors from the attempted command 
     String errors = convertStreamToString(traceRt.getErrorStream()); 
     if(errors != "") LOGGER.error(errors); 
    } 
    catch (IOException e) { 
     LOGGER.error("error while performing trace route command", e); 
    } 

    return route; 
} 
+2

La condición se debe cambiar a os.toLowerCase(). Contains ("win") – Hassan

+0

donde usó el método ** convertStreamToString **? – Omore

+0

@Omore ¿estás preguntando dónde está definido? Creo que es un método personalizado que escribí. Ya no tengo acceso al código, así que tendrás que descubrir cómo implementarlo. Si lo hace, actualice mi respuesta para incluirla; obtendrás puntos por hacer eso. –