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
6
A
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;
}
1
Sie müssen die jpcap library (vielleicht die SourceForge jpcap funktioniert auch) und verwenden Sie die ICMPPacket Klasse, um die gewünschte Funktionalität zu implementieren.
Hier ist die Java traceroute implementation mit der jpcap library.
Die Bedingung sollte in os.toLowerCase() geändert werden enthält ("win") – Hassan
wo Sie ** convertStreamToString ** Methode verwendet? – Omore
@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. –