2010-04-13 5 views
6

Java hat keine Grundelemente für ICMPs und Traceroute. Wie man das überwindet? Im Grunde baue ich Code, der in * nix und Windows laufen sollte, und brauche einen Code, der auf beiden Plattformen läuft.Wie ICMPs und Traceroutes in Java

Antwort

4

Folgendes habe ich heute geschrieben, um den Befehl trace route in Java zu "implementieren". Ich habe nur in Windows getestet, aber es sollte auch in Linux funktionieren, obwohl es mehrere Traceroute-Tools für Linux gibt, so dass es höchstwahrscheinlich einige Überprüfungen auf die Existenz dieser Programme geben muss.

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

Die Bedingung sollte in os.toLowerCase() geändert werden enthält ("win") – Hassan

+0

wo Sie ** convertStreamToString ** Methode verwendet? – Omore

+0

@Omore fragen Sie, wo es definiert ist? Ich denke, das ist eine benutzerdefinierte Methode, die ich geschrieben habe. Ich habe keinen Zugriff mehr auf den Code, also müssen Sie herausfinden, wie Sie ihn implementieren können. Wenn Sie dies tun, aktualisieren Sie bitte meine Antwort, um sie aufzunehmen; Dafür bekommst du Punkte. –