- java/
- 在Java中,有没有更好的方法使用特定的本地IP地址执行ICMP Ping
在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?