linux机器上执行ping命令的java方法
2012-12-11 18:56
531 查看
在编写网管系统的过程中,经常需要判断某台机器是否可用,于是采用使用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) {
// TODO Auto-generated catch block
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) {
// TODO Auto-generated catch block
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.51
PING 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 ms
64 bytes from 192.168.3.51: icmp_seq=2 ttl=64 time=0.332 ms
64 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 2000ms
rtt min/avg/max/mdev = 0.332/5.103/14.619/6.728 ms
[root@abc ~]#
ping不同的机器的响应消息如下:
[root@abc ~]# ping -c 3 192.168.3.52
PING 192.168.3.52 (192.168.3.52) 56(84) bytes of data.
From 192.168.7.181 icmp_seq=1 Destination Host Unreachable
From 192.168.7.181 icmp_seq=2 Destination Host Unreachable
From 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机器上执行ping命令的java方法
- java 执行linux命令或shell脚本方法
- java本地调用cmd,shell命令,远程调用Linux执行命令方法总结
- Ganymed SSH-2 java执行远程linux机器命令工具
- java本地调用cmd,shell命令,远程调用Linux执行命令方法总结
- 纯Java通过SSH执行Linux命令的方法及代码
- java调用windows/Linux/Unix 命令行执行命令的方法--调用ImageMagick的合并图形的命令
- java执行Linux命令的方法
- Linux下执行的java命令重定向到文件中的方法
- 纯Java通过SSH执行Linux命令的方法及代码
- java通过ssh2远程连接计算机并执行linux命令的方法(转)
- Java程序执行Linux命令(JSP运行其他程序)
- sshxcute --java远程执行linux/unix命令的工具类
- linux的shell命令检测某个java程序是否执行
- Linux下用java -jar运行可执行jar包的方法教程
- Java调用Linux命令的方法
- java 执行系统命令的方法
- Linux系统下如何禁止ping命令或允许ping命令的方法
- sqlplus 执行linux系统命令方法
- Python执行Linux系统命令的4种方法