2010-04-13 11 views
6

В Java нет примитивов для ICMP и traceroute. Как преодолеть это? В основном я создаю код, который должен запускаться в * nix и Windows, и нужен фрагмент кода, который будет работать на обеих платформах.Как ICMPs и traceroutes в Java

ответ

4

Вот что я написал сегодня, чтобы «реализовать» команду трассировки маршрута в Java. Я тестировал только в Windows, но он также должен работать в Linux, хотя для Linux доступно несколько инструментов traceroute, поэтому, скорее всего, необходимо наличие некоторых проверок наличия этих программ.

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

Условие должно быть изменено на os.toLowerCase(). Contains ("win") – Hassan

+0

где вы использовали ** convertStreamToString ** метод? – Omore

+0

@Omore вы спрашиваете, где это определено? Я думаю, что это специальный метод, который я написал. У меня больше нет доступа к коду, поэтому вам нужно будет выяснить, как его реализовать. Если да, обновите мой ответ, чтобы включить его; вы получите очки за это. –