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
6
A
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;
}
1
Vous aurez besoin du jpcap library (peut-être le SourceForge jpcap travaille aussi) et utiliser la classe ICMPPacket pour implémenter la fonctionnalité souhaitée.
Voici le Java traceroute implementation utilisant le jpcap library.
La condition doit être remplacée par os.toLowerCase(). Contains ("win") – Hassan
où vous avez utilisé la méthode ** convertStreamToString **? – Omore
@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. –