如何在Java中使用ICMP和traceroutes

时间:2010-04-13 07:26:20

标签: java sockets traceroute icmp

Java没有ICMP和traceroute的原语。怎么克服这个?基本上我正在构建应该在* nix和Windows中运行的代码,并且需要一段可在两个平台上运行的代码。

2 个答案:

答案 0 :(得分:4)

这就是我今天在Java中“实现”trace route命令所写的内容。我只在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 :(得分:1)

您需要jpcap library (也许SourceForge jpcap也在工作)并使用ICMPPacket类来实现所需的功能。

以下是使用Java traceroute implementationjpcap library