7

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

4

2 回答 2

5

这是我今天写的用Java“实现”跟踪路由命令的内容。我只在 Windows 中进行了测试,但它也应该在 Linux 中工作,尽管有几个可用于 Linux 的跟踪路由工具,所以很可能需要对这些程序的存在进行一些检查。

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;
}
于 2013-01-22T23:16:40.563 回答
2

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

这是使用jpcap 库的Java traceroute 实现

于 2016-04-18T19:17:04.940 回答