Как ICMP и трассировки в Java - PullRequest
6 голосов
/ 13 апреля 2010

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

Ответы [ 2 ]

4 голосов
/ 23 января 2013

Вот что я написал сегодня, чтобы «реализовать» команду трассировки маршрута в 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;
}
1 голос
/ 18 апреля 2016

Вам понадобится библиотека jpcap (возможно, также работает SourceForge jpcap ) и класс ICMPPacket для реализации желаемой функциональности.

Вот реализация Java traceroute с использованием библиотеки jpcap .

...