通过ping获取到返回字符串之后截取信息得到自己想要的数据。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URI;
import java.util.regex.Pattern;import android.support.v4.util.ArrayMap;/*** 类描述:手机ping工具类<br>* 权限 <uses-permission android:name="android.permission.INTERNET"/> <br>* 由于涉及网络,建议异步操作<br>* 创建人:liangkuan<br>* 创建时间:2016/4/23 14:05<br>*/
public class PingUtil
{private static final String ipRegex ="((?:(?:25[0-5]|2[0-4]\\d|((1\\d{2})|([1-9]?\\d)))\\.){3}(?:25[0-5]|2[0-4]\\d|((1\\d{2})|([1-9]?\\d))))";/*** 获取由ping url得到的IP地址** @param url 需要ping的url地址* @return url的IP地址 如 192.168.0.1*/public static String getIPFromUrl(String url){String domain = getDomain(url);if (null == domain){return null;}if (isMatch(ipRegex, domain)){return domain;}String pingString = ping(createSimplePingCommand(1, 100, domain));if (null != pingString){try{String tempInfo = pingString.substring(pingString.indexOf("from") + 5);return tempInfo.substring(0, tempInfo.indexOf("icmp_seq") - 2);}catch (Exception e){e.printStackTrace();}}return null;}/*** 获取ping最小RTT值** @param url 需要ping的url地址* @return 最小RTT值,单位 ms 注意:-1是默认值,返回-1表示获取失败*/public static int getMinRTT(String url){return getMinRTT(url, 1, 100);}/*** 获取ping的平均RTT值** @param url 需要ping的url地址* @return 平均RTT值,单位 ms 注意:-1是默认值,返回-1表示获取失败*/public static int getAvgRTT(String url){return getAvgRTT(url, 1, 100);}/*** 获取ping的最大RTT值** @param url 需要ping的url地址* @return 最大RTT值,单位 ms 注意:-1是默认值,返回-1表示获取失败*/public static int getMaxRTT(String url){return getMaxRTT(url, 1, 100);}/*** 获取ping的RTT的平均偏差** @param url 需要ping的url地址* @return RTT平均偏差,单位 ms 注意:-1是默认值,返回-1表示获取失败*/public static int getMdevRTT(String url){return getMdevRTT(url, 1, 100);}/*** 获取ping url的最小RTT** @param url 需要ping的url地址* @param count 需要ping的次数* @param timeout 需要ping的超时,单位ms* @return 最小RTT值,单位 ms 注意:-1是默认值,返回-1表示获取失败*/public static int getMinRTT(String url, int count, int timeout){String domain = getDomain(url);if (null == domain){return -1;}String pingString = ping(createSimplePingCommand(count, timeout, domain));if (null != pingString){try{String tempInfo = pingString.substring(pingString.indexOf("min/avg/max/mdev") + 19);String[] temps = tempInfo.split("/");return Math.round(Float.valueOf(temps[0]));}catch (Exception e){e.printStackTrace();}}return -1;}/*** 获取ping url的平均RTT** @param url 需要ping的url地址* @param count 需要ping的次数* @param timeout 需要ping的超时时间,单位 ms* @return 平均RTT值,单位 ms 注意:-1是默认值,返回-1表示获取失败*/public static int getAvgRTT(String url, int count, int timeout){String domain = getDomain(url);if (null == domain){return -1;}String pingString = ping(createSimplePingCommand(count, timeout, domain));if (null != pingString){try{String tempInfo = pingString.substring(pingString.indexOf("min/avg/max/mdev") + 19);String[] temps = tempInfo.split("/");return Math.round(Float.valueOf(temps[1]));}catch (Exception e){e.printStackTrace();}}return -1;}/*** 获取ping url的最大RTT** @param url 需要ping的url地址* @param count 需要ping的次数* @param timeout 需要ping的超时时间,单位ms* @return 最大RTT值,单位 ms 注意:-1是默认值,返回-1表示获取失败*/public static int getMaxRTT(String url, int count, int timeout){String domain = getDomain(url);if (null == domain){return -1;}String pingString = ping(createSimplePingCommand(count, timeout, domain));if (null != pingString){try{String tempInfo = pingString.substring(pingString.indexOf("min/avg/max/mdev") + 19);String[] temps = tempInfo.split("/");return Math.round(Float.valueOf(temps[2]));}catch (Exception e){e.printStackTrace();}}return -1;}/*** 获取RTT的平均偏差** @param url 需要ping的url* @param count 需要ping的次数* @param timeout 需要ping的超时时间,单位ms* @return RTT平均偏差,单位 ms 注意:-1是默认值,返回-1表示获取失败*/public static int getMdevRTT(String url, int count, int timeout){String domain = getDomain(url);if (null == domain){return -1;}String pingString = ping(createSimplePingCommand(count, timeout, domain));if (null != pingString){try{String tempInfo = pingString.substring(pingString.indexOf("min/avg/max/mdev") + 19);String[] temps = tempInfo.split("/");return Math.round(Float.valueOf(temps[3].replace(" ms", "")));}catch (Exception e){e.printStackTrace();}}return -1;}/*** 获取ping url的丢包率,浮点型** @param url 需要ping的url地址* @return 丢包率 如50%可得 50,注意:-1是默认值,返回-1表示获取失败*/public static float getPacketLossFloat(String url){String packetLossInfo = getPacketLoss(url);if (null != packetLossInfo){try{return Float.valueOf(packetLossInfo.replace("%", ""));}catch (Exception e){e.printStackTrace();}}return -1;}/*** 获取ping url的丢包率,浮点型** @param url 需要ping的url地址* @param count 需要ping的次数* @param timeout 需要ping的超时时间,单位 ms* @return 丢包率 如50%可得 50,注意:-1是默认值,返回-1表示获取失败*/public static float getPacketLossFloat(String url, int count, int timeout){String packetLossInfo = getPacketLoss(url, count, timeout);if (null != packetLossInfo){try{return Float.valueOf(packetLossInfo.replace("%", ""));}catch (Exception e){e.printStackTrace();}}return -1;}/*** 获取ping url的丢包率** @param url 需要ping的url地址* @return 丢包率 x%*/public static String getPacketLoss(String url){return getPacketLoss(url, 1, 100);}/*** 获取ping url的丢包率** @param url 需要ping的url地址* @param count 需要ping的次数* @param timeout 需要ping的超时时间,单位ms* @return 丢包率 x%*/public static String getPacketLoss(String url, int count, int timeout){String domain = getDomain(url);if (null == domain){return null;}String pingString = ping(createSimplePingCommand(count, timeout, domain));if (null != pingString){try{String tempInfo = pingString.substring(pingString.indexOf("received,"));return tempInfo.substring(9, tempInfo.indexOf("packet"));}catch (Exception e){e.printStackTrace();}}return null;}// ********************以下是一些辅助方法********************//private static String getDomain(String url){String domain = null;try{domain = URI.create(url).getHost();}catch (Exception e){e.printStackTrace();}return domain;}private static boolean isMatch(String regex, String string){return Pattern.matches(regex, string);}private static String ping(String command){Process process = null;try{process = Runtime.getRuntime().exec(command);InputStream is = process.getInputStream();BufferedReader reader = new BufferedReader(new InputStreamReader(is));StringBuilder sb = new StringBuilder();String line;while (null != (line = reader.readLine())){sb.append(line);sb.append("\n");}reader.close();is.close();return sb.toString();}catch (IOException e){e.printStackTrace();}finally{if (null != process){process.destroy();}}return null;}private static String createSimplePingCommand(int count, int timeout, String domain){return "/system/bin/ping -c " + count + " -w " + timeout + " " + domain;}private static String createPingCommand(ArrayMap<String, String> map, String domain){String command = "/system/bin/ping";int len = map.size();for (int i = 0; i < len; i++){command = command.concat(" " + map.keyAt(i) + " " + map.get(map.keyAt(i)));}command = command.concat(" " + domain);return command;}
}

Android下ping的简单工具类相关推荐

  1. 一个Android下ping的简单工具类

    这是一个自己写的Android下的ping的简单工具类,主要是通过ping获取到返回字符串之后截取信息得到自己想要的数据.不多说,上源码 import java.io.BufferedReader; ...

  2. 干货 | android下使用的渗透工具介绍

    要说在android下使用的渗透工具,第一款当然是Dsploit. Dsploit是android 平台上的渗透套件,可以捕捉发现网络包扫描设备 发现开发端口服务及渗透.Dsploit 需要手机ROO ...

  3. android开发监听媒体播放器,Android开发之媒体播放工具类完整示例

    本文实例讲述了Android开发之媒体播放工具类.分享给大家供大家参考,具体如下: package com.maobang.imsdk.util; import android.media.Media ...

  4. golang利用反射写入excel的简单工具类

    golang利用反射写入excel的简单工具类 工具类源码 使用方法 工具类源码 package excelimport ("errors""github.com/tea ...

  5. Android开发 无线Wifi+WifiUtil工具类,android开发网格布局

    <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...

  6. android m权限工具类,android M权限适配,简单工具类

    很简单没什么说的, 因为项目大了,不能轻易引入第三方库,同时确实也没必要为了适配下权限就引入一个库. 这里写了个处理权限的工具类(部分借鉴的,勿喷),不嫌弃的话拿去! 用法: 1.申请权限: Perm ...

  7. Android开发 几个常用工具类

    本文出自[张鸿洋的博客]并 做了部分修改. 转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38965311 打开大家手上的项目,基 ...

  8. Android项目中常用的工具类集(史上最全整理)

    如果你是一名有经验的Android开发者,那么你一定积累了不少的工具类,这些工具类是帮助我们快速开发的基础.如果你是新手,那么有了这些辅助类,可以让你的项目做起来更加的简单. 下面介绍一个在GitHu ...

  9. Android之SharedPreferences两个工具类

    相信Android的这个最简单的存储方式大家都很熟悉了,但是有一个小小技巧,也许你没有用过,今天就跟大家分享一下,我们可以把SharedPreferences封装在一个工具类中,当我们需要写数据和读数 ...

  10. Android RSA加密解密的 工具类的使用

    RSA 比较特殊,我们首先要生成私钥和公钥,然后在加密的时候,使用私钥加密,在解密的时候使用公钥解密. //RSA 的初始化,获得私钥和密钥public void rsaInit(){try {Key ...

最新文章

  1. python——面向对象进阶之新增属性和方法
  2. java中 快捷键输入System.out.println();
  3. Oracle 11gR2发布11.2.0.3 Patchset补丁集-又一重量级更新
  4. Attempt to present vc on vc which is already presenting vc/(null)
  5. MATLAB凸包Convex hull运算
  6. 全民加速节:全站加速在互联网媒体应用上的最佳实践
  7. 看我出招之:svchost.exe文件删不得
  8. python03_Python中的列表、元组、字典和集合
  9. ecshop备份数据 ecshop转移数据 ecshop更换主机
  10. 智能合约最佳实践 之 Solidity 编码规范
  11. Unix domain socket IPC
  12. 数据库索引为什么用B+树实现?
  13. (转)霍华德·马克斯:警惕那些人人都追捧的事物
  14. 汉诺塔问题的c语言递归
  15. 胡寿松《自动控制原理》课后习题重点题与考研刷题指南(ch1-4)
  16. Json格式字符串转换成Json格式数据
  17. TFS 2010 使用手册(四)备份与恢复
  18. STM32 Simulink 自动代码生成电机控制——脉振高频注入
  19. 新手做seo该怎么做?seo新手入门基础教程
  20. 用Python实现微信定时发送消息

热门文章

  1. 系统集成项目管理工程师教程 第二版下载,仅供学习交流使用
  2. win7旗舰版梦幻桌面高清视频下载
  3. Visual Studio2012版安装教程--C++新手初学者
  4. matlab肌电信号hz低通滤波器,燕山大学 数字信号处理 课程设计 肌电信号 Matlab 程序汇总...
  5. “年少当攀第一流,恰如明月冠中秋”
  6. python共轭梯度法_Numerical Analysis: 共轭梯度法(1)--基本原理
  7. 基于Springboot实现仓库管理系统
  8. Linux系统开发|QT制作聊天软件实验报告
  9. hackerrank 刷题一(python 基础)
  10. 机器学习极好的入门学习视频推荐