2010-04-13 40 views
6

Java n'a pas de primitives pour ICMP et traceroute. Comment surmonter cela? Fondamentalement, je construis du code qui devrait fonctionner dans * nix et Windows, et j'ai besoin d'un morceau de code qui fonctionnera sur les deux plates-formes.Comment ICMPs et traceroutes en Java

Répondre

4

Voici ce que j'ai écrit aujourd'hui pour "implémenter" la commande trace route en Java. Je n'ai testé que sous Windows mais cela devrait aussi fonctionner sous Linux bien qu'il y ait plusieurs outils de traceroute disponibles pour Linux, il est donc probable qu'il y ait des vérifications de l'existence de ces programmes.

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 condition doit être remplacée par os.toLowerCase(). Contains ("win") – Hassan

+0

où vous avez utilisé la méthode ** convertStreamToString **? – Omore

+0

@Plus vous demandez où cela est défini? Je pense que c'est une méthode personnalisée que j'ai écrite. Je n'ai plus accès au code, vous devrez donc savoir comment l'implémenter. Si vous le faites, veuillez mettre à jour ma réponse pour l'inclure; vous obtiendrez des points pour cela. –