java代码实现判断ip地址可以ping通操作

在这之前先说一下我试的其他方法
InetAddress.getByName(ip).isReachable(3000)
这种方法是Java 1.5,java.net包中就实现了ICMP ping的功能。
这个方法有吭,不管能不能ping通老是返回true。
我也把代码搞到下面,有兴趣的可以研究一下
传授给在下 抱拳了老铁

private static final int timeOut = 3000; //超时应该在3钞以上
public static boolean isP5ing(String ip) {
    boolean status = false;
    if(ip != null){
        try {
            status = InetAddress.getByName(ip).isReachable(timeOut);
        } catch(UnknownHostException e) {

        } catch(IOException e) {

        }
    }
    return status;
}

这个就是那个方法,在我这反正是不好使,不知道为什么
下面说一下我用的方法,也是在网上参照各种大神的,自己记录一下,方便以后自己回顾
上代码↓↓↓↓↓↓↓↓

public static boolean isPing(String ip) {
        log.debug("ip地址为:"+ip);
        if (ip == null){
            return false;
        }
        BufferedReader in = null;
        try {
            Process pro = Runtime.getRuntime().exec("ping " + ip +" -n 5 -w 5000");
            //GB2312  解决InputStreamReader乱码问题
            in = new BufferedReader(new InputStreamReader(pro.getInputStream(),"GB2312"));
            //逐行检查输出,计算类似出现=23ms TTL=62字样的次数
            int connectedCount = 0;
            String line = null;
            while ((line = in.readLine()) != null){
                log.info(line);
                connectedCount += getCheckResult(line);// 如果出现类似=23ms TTL=62这样的字样,出现的次数=测试次数则返回真
            }
            return connectedCount == 5;
        } catch (Exception ex) {
            ex.printStackTrace();   // 出现异常则返回假
            return false;
        }finally {
            try {
                in.close();
            }catch (IOException e){
                e.printStackTrace();
            }
        }
    }

    //若line含有=18ms TTL=16字样,说明已经ping通,返回1,否則返回0.
    private static int getCheckResult(String line) {  // System.out.println("控制台输出的结果为:"+line);
        Pattern pattern = Pattern.compile("(\\d+ms)(\\s+)(TTL=\\d+)",  Pattern.CASE_INSENSITIVE);
        Matcher matcher = pattern.matcher(line);
        while (matcher.find()) {
            return 1;
        }
        return 0;
    }

这个方法的思路就是使用runtime执行doc命令,把执行命令返回的结果进行正则表达式进行匹配,如果匹配成功了,说明就ping通啦。

下面是我输出在控制台的信息,是和小黑框里输出的是一样的。
ping 通的
在这里插入图片描述
ping不通的
在这里插入图片描述

发布了20 篇原创文章 · 获赞 14 · 访问量 7511

猜你喜欢

转载自blog.csdn.net/weixin_44467567/article/details/102919054