linux机器上执行ping命令的java方法
2016-04-19 18:11
609 查看
在编写网管系统的过程中,经常需要判断某台机器是否可用,于是采用使用ping机器的方法判断该机器当前是否可用,方法如下:
此方法关键命令为红色部分:ping -c 3 + ip;这个命令为linux系统所有,windows上不能执行,表示方法执行之后,只需要返回3行响应消息便可,不然在linux中,如果不终止该命令,会不停的打印响应的消息。
ping通机器的响应消息如下:
[root@abc ~]# ping -c 3 192.168.3.51PING 192.168.3.51 (192.168.3.51) 56(84) bytes of data.64 bytes from 192.168.3.51: icmp_seq=1 ttl=64 time=14.6 ms64 bytes from 192.168.3.51: icmp_seq=2 ttl=64 time=0.332 ms64
bytes from 192.168.3.51: icmp_seq=3 ttl=64 time=0.359 ms
--- 192.168.3.51 ping statistics ---3 packets transmitted, 3 received, 0% packet loss, time 2000msrtt min/avg/max/mdev = 0.332/5.103/14.619/6.728 ms[root@abc ~]#
ping不同的机器的响应消息如下:
[root@abc ~]# ping -c 3 192.168.3.52PING 192.168.3.52 (192.168.3.52) 56(84) bytes of data.From 192.168.7.181 icmp_seq=1 Destination Host UnreachableFrom 192.168.7.181 icmp_seq=2
Destination Host UnreachableFrom 192.168.7.181 icmp_seq=3 Destination Host Unreachable
--- 192.168.3.52 ping statistics ---3 packets transmitted, 0 received, +3 errors, 100% packet loss, time 2000ms, pipe 3[root@abc ~]#
因此,方法根据这两个条件进行判断,如果含有Unreachable或者100% packet loss就表示机器ping不同,不可用,否则为可用。
/** * @Title: execPingCommand * @Description: 执行ping命令,查看设备是否可用 * @param @param deviceIp * @return boolean true-能ping通,false-不能ping通 * @throws */ public static boolean execPingCommand(String deviceIp) { logger.debug("enter VolumeManage.execPingCommand(String deviceIp)"); boolean networkUseable = false; // String address="www.javawind.net"; Process process = null; try { process = Runtime.getRuntime().exec("ping -c 3"+ deviceIp); } catch (IOException e1) { logger.error("System error:", e1); } InputStreamReader r = new InputStreamReader(process.getInputStream()); LineNumberReader returnData = new LineNumberReader(r); String returnMsg =""; String line =""; try { while ((line = returnData.readLine()) != null) { // System.out.println(line); returnMsg += line; } if (returnMsg.indexOf("Unreachable") != -1 || returnMsg.indexOf("100% packet loss") != -1) { networkUseable = false; } else { networkUseable = true; } } catch (IOException e) { logger.error("System error:", e); } finally { if (returnData != null) { try { returnData.close(); } catch (IOException e) { // TODO Auto-generated catch block logger.error("System error:", e); } } if (r != null) { try { r.close(); } catch (IOException e) { // TODO Auto-generated catch block logger.error("System error:", e); } } } logger.debug("exit VolumeManage.execPingCommand(String deviceIp)" +"[networkUseable] ="+ networkUseable); return networkUseable; }
此方法关键命令为红色部分:ping -c 3 + ip;这个命令为linux系统所有,windows上不能执行,表示方法执行之后,只需要返回3行响应消息便可,不然在linux中,如果不终止该命令,会不停的打印响应的消息。
ping通机器的响应消息如下:
[root@abc ~]# ping -c 3 192.168.3.51PING 192.168.3.51 (192.168.3.51) 56(84) bytes of data.64 bytes from 192.168.3.51: icmp_seq=1 ttl=64 time=14.6 ms64 bytes from 192.168.3.51: icmp_seq=2 ttl=64 time=0.332 ms64
bytes from 192.168.3.51: icmp_seq=3 ttl=64 time=0.359 ms
--- 192.168.3.51 ping statistics ---3 packets transmitted, 3 received, 0% packet loss, time 2000msrtt min/avg/max/mdev = 0.332/5.103/14.619/6.728 ms[root@abc ~]#
ping不同的机器的响应消息如下:
[root@abc ~]# ping -c 3 192.168.3.52PING 192.168.3.52 (192.168.3.52) 56(84) bytes of data.From 192.168.7.181 icmp_seq=1 Destination Host UnreachableFrom 192.168.7.181 icmp_seq=2
Destination Host UnreachableFrom 192.168.7.181 icmp_seq=3 Destination Host Unreachable
--- 192.168.3.52 ping statistics ---3 packets transmitted, 0 received, +3 errors, 100% packet loss, time 2000ms, pipe 3[root@abc ~]#
因此,方法根据这两个条件进行判断,如果含有Unreachable或者100% packet loss就表示机器ping不同,不可用,否则为可用。
相关文章推荐
- Linux学习总结(4)——Centos6.5使用yum安装mysql——快速上手必备
- Linux学习总结(4)——Centos6.5使用yum安装mysql——快速上手必备
- Centos6.5使用yum安装mysql——快速上手必备
- Linux下Rsync+Inotify-tools实现数据实时同步
- linux 常见问题大全
- centos 系统 下载valgrind及其使用
- Linux学习笔记(Redhat)
- linux创建软链接命令-ln -s
- 当Linux服务器的时间不对的时候,可以使用ntpdate工具来校正时间
- Linux文件权限
- Linux文件权限
- Linux文件权限
- Linux head&tail命令
- Linux 调优方案
- 微软拥抱Linux,着实太晚了
- 正确配置Linux系统ulimit值的方法
- Linux下命令行安装weblogic10.3.6
- Linux 服务器时间同步
- 信号量(sem)
- linux grep命令详解