在Java中,有没有更好的方法使用特定的本地IP地址执行ICMP Ping

在Java中,有没有更好的方法使用特定的本地IP地址执行ICMP Ping,java,networking,icmp,Java,Networking,Icmp,我想用Java实现一个ICMP ping程序,有两种方法可以实现 使用iNet地址: InetAddress inet = InetAddress.getByName(args[0]); inet.isReachable(1000); 使用Process+命令: Runtime rt = Runtime.getRuntime(); Process mypro = rt.exec("ping " + args[0]); mypro.waitFor(); 但它们都有缺点: 第一种方式:

我想用Java实现一个ICMP ping程序,有两种方法可以实现

  • 使用iNet地址:

    InetAddress inet = InetAddress.getByName(args[0]); 
    inet.isReachable(1000);
    
  • 使用Process+命令:

    Runtime rt = Runtime.getRuntime();
    Process mypro = rt.exec("ping " + args[0]);
    mypro.waitFor();
    
  • 但它们都有缺点:

    第一种方式:

    • 我不能指示本地IP和TOS, 例如:ping-I localip DestIP-Q 120
    第二种方式:

    • 它确实可以达到所有要求,但我担心性能, 因为每个ping都创建一个进程, 如果我有上百万的ping,那就太可怕了

    顺便说一句,ToS已经被弃用,取而代之的是DSCP,除非中间设备被配置为使用它(不是默认的,在公共互联网上也不可用),否则它们实际上都不会做任何事情,并且路径中存在拥塞。您是否愿意针对本机(即JNI)编写和链接代码?@AndreyAkhmetov使用JNI和调用ping命令一样吗?你喜欢什么?如果你必须在我上面列出的两种方式中进行选择?@RonMaupin是的,我也在使用dscp,但是dscp在TOS中,所以我必须设置TOS。不管怎么说,对我来说最重要的是,我怎样才能表明我的本地IP,我的意思是:ping-I10.1.1.11。第一种方式通常根本不使用ICMP PING:它使用到端口7(echo)的TCP连接;请参阅Javadoc。2.为什么会有数以百万计的ping?顺便说一句,ToS已经被弃用,取而代之的是DSCP,除非中间设备配置为使用它(不是默认的,在公共互联网上也不可用),否则它们实际上都不做任何事,路径中存在拥塞。您是否愿意编写和链接本机(即JNI)代码?@AndreyAkhmetov使用JNI与调用ping命令相同?你喜欢什么?如果你必须在我上面列出的两种方式中进行选择?@RonMaupin是的,我也在使用dscp,但是dscp在TOS中,所以我必须设置TOS。不管怎么说,对我来说最重要的是,我怎样才能表明我的本地IP,我的意思是:ping-I10.1.1.11。第一种方式通常根本不使用ICMP PING:它使用到端口7(echo)的TCP连接;请参阅Javadoc。2.为什么会有数百万的ping?