您的位置:首页 > 运维架构 > Linux

java代码ping服务IP工具类(Windows,Linux环境)

2017-05-23 15:11 691 查看
public class PingIpUtils {

private static Logger logger = LoggerFactory.getLogger(PingIpUtils.class);
/**
* @param ipAddress  ip地址
* @param pingTimes  次数(一次ping,对方返回的ping的结果的次数)
* @param timeOut    超时时间 单位ms(ping不通,设置的此次ping结束时间)
* @return
*/
public static boolean ping(String ipAddress, int pingTimes, int timeOut) {
BufferedReader in = null;
String pingCommand = null;
Runtime r = Runtime.getRuntime();
String osName = System.getProperty("os.name");
logger.info("项目所在系统是:" +osName);
if(osName.contains("Windows")){
//将要执行的ping命令,此命令是windows格式的命令
pingCommand = "ping " + ipAddress + " -n " + pingTimes    + " -w " + timeOut;
}else{
//将要执行的ping命令,此命令是Linux格式的命令
//-c:次数,-w:超时时间(单位/ms)  ping -c 10 -w 0.5 192.168.120.206
pingCommand = "ping " + " -c " + "4" + " -w " + "2 " + ipAddress;
}
try {
//执行命令并获取输出
Process p = r.exec(pingCommand);
if (p == null) {
return false;
}
in = new BufferedReader(new InputStreamReader(p.getInputStream()));
int connectedCount = 0;
String line = null;
while ((line = in.readLine()) != null) {
connectedCount += getCheckResult(line,osName);
}
//如果出现类似=23 ms ttl=64(TTL=64 Windows)这样的字样,出现的次数=测试次数则返回真
//return connectedCount == pingTimes;
logger.info("ping通设备IP的次数为:" +connectedCount);
return connectedCount >= 2 ? true : false;
} catch (Exception ex) {
ex.printStackTrace(); //出现异常则返回假
return false;
} finally {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
//若line含有=18 ms ttl=64字样,说明已经ping通,返回1,否則返回0.
private static int getCheckResult(String line,String osName) {
if(osName.contains("Windows")){
if(line.contains("TTL=")){
return 1;
}
}else{
if(line.contains("ttl=")){
return 1;
}
}
return 0;
}

public static void main(String[] args) {
String ipAddress = "www.sigchina.com";
String osName = System.getProperty("os.name");
System.out.println(osName);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: