精华内容
下载资源
问答
  • 流量使用情况,好多软件都会带这个功能,比如360的流量监控,好多之类的,手机管家都会带上这个流量计算的功能,连系统应用设置里面也会带一个流量使用情况的查看功能,为什么呢?因为流量的使用关乎到用户使用流量...

    不积跬步无以至千里
           流量使用情况,好多软件都会带这个功能,比如360的流量监控,好多之类的,手机管家都会带上这个流量计算的功能,连系统应用设置里面也会带一个流量使用情况的查看功能,为什么呢?因为流量的使用关乎到用户使用流量的计费,当流量使用了很多,会给用户造成额外的损失,因此流量使用情况这个功能是好多手机管家不可或缺的一个功能。
           而正好,我这个项目也要做一个流量使用情况的计算,在网上找了一番,好多推荐的都是TrafficStats这个类,这个类能获取到从开机到现在的总发送字节数和接收字节数,而加起来就是系统总消耗流量值(不包括wifi使用的消耗)和包含wifi的总发送消耗流量、总接收消耗流量,还能获取从开机到现在针对某个应用消耗的发送字节数和接收字节数。但是有两个缺点,一、只能是开机到现在的流量使用情况,如果中间开关机操作,以前的流量使用情况就被清零了。二、不能获取某段时间内的流量消耗情况。
    根据上面对TrafficStats的简单分析,我发现我的这个项目需要某段时间(开始时间、结束时间、某个卡)、15分钟获取一次消耗的流量情况,因此不适合用这个类,而只能另寻他处,大家都知道,系统Settings里面有一个流量使用情况的功能,可以从这里看看它是怎么做的?接下来就说说。
    这里写图片描述
           如图,我们可以看到流量

    展开全文
  • Mac-使用vnstat统计流量

    千次阅读 2019-12-12 19:02:43
    Linux服务器上也可以使用:vps或者服务器都是限流量的,但是又很多服务商并没有提供详细的流量表,比如每天的流量表,所以肯定有人很想知道自己服务器到底跑了多少流量使用Mac来试一下vnstat命令 第一步:使用...

    Mac-使用vnstat查看流量统计(vnstat就是一个很好用的流量统计命令)

    Linux服务器上也可以使用:vps或者服务器都是限流量的,但是又很多服务商并没有提供详细的流量表,比如每天的流量表,所以肯定有人很想知道自己服务器到底跑了多少流量。

    使用Mac来试一下vnstat命令

    第一步:使用brew安装 vnstat

    brew install vnstat

    第二步:安装完成需要启动vnstat服务

    sudo brew services start vnstat

    第三步:vnstat的具体指令使用  vnstat --help

     vnstat --help

    来查看具体使用的场景

    展开全文
  • 在没有Root的情况下,Android应用流量统计在6.0之前一直没有太好的办法,官方虽然提供了TrafficStats,但其主要功能是设备启动以来流量的统计信息,和时间信息无法很好的配合。本文首先简单对比下TrafficStats和...

    在没有Root的情况下,Android应用流量统计在6.0之前一直没有太好的办法,官方虽然提供了TrafficStats,但其主要功能是设备启动以来流量的统计信息,和时间信息无法很好的配合。最近再看TrafficStats类时,发现说明中提到,为获取更具鲁棒性的网络历史数据,建议使用NetworkStatsManager。

    本文首先简单对比下TrafficStats和NetworkStatsManager各自的限制和优缺点,然后详细说明NetworkStatsManager的用法,并给出主要代码。

    TrafficStats

    Android API8提供了android.net.TrafficStats类。
    通过此类能获取设备重启以来网络信息,部分函数如下所示:

    static long  getMobileRxBytes()  //获取通过移动数据网络收到的字节总数
    static long  getMobileTxBytes()  //通过移动数据网发送的总字节数  
    static long  getTotalRxBytes()  //获取设备总的接收字节数 
    static long  getTotalTxBytes()  //获取设备总的发送字节数
    static long  getUidRxBytes(int uid)  //获取指定uid的接收字节数  
    static long  getUidTxBytes(int uid) //获取指定uid的发送字节数 

    通过文档及上述函数可以知道,TrafficStats能够获取设备的数据流量和总的网络流量消耗(一般情况下也就得到Wi-Fi下的流量信息);可以查询uid对应的流量信息,而uid可以通过应用的包名查询到,因此能够查询某个应用的流量统计信息(不考虑shareuid)。非常方便的是,它的使用不需要特别的权限。另一方面它也一些限制:
    (1)无法获取应用的数据流量消耗
    从文档中仅能获取到指定uid的流量,但无法区分不同网络类型下的消耗
    间接方法是通过监听网络切换,做好流量记录(但是要保证你的应用一直存活,且一定准确接收到网络切换信息),基本不可用。
    (2)无法获取某个时间段内的流量消耗
    从API文档中看,函数参数没有与时间相关的信息。而且重要的一点是,TrafficStats类中记录的是设备重启以来的流量统计信息。因为TrafficStats 类,底层还是读取/proc/net/xt_qtaguid/stats 对内容进行解析,将得到对应的结果返回上层。

    NetworkStatsManager

    在Android 6.0(API23)中新增加的类,提供网络使用历史统计信息,同时特别强调了可查询指定时间间隔内的统计信息。看看部分函数(非静态):

    //查询指定网络类型在某时间间隔内的总的流量统计信息
    NetworkStats.Bucket querySummaryForDevice(int networkType, String subscriberId, long startTime, long endTime)
    
     //查询某uid在指定网络类型和时间间隔内的流量统计信息
    NetworkStats queryDetailsForUid(int networkType, String subscriberId, long startTime, long endTime, int uid)  
    
    //查询指定网络类型在某时间间隔内的详细的流量统计信息(包括每个uid)
    NetworkStats queryDetails(int networkType, String subscriberId, long startTime, long endTime) 

    从上述函数和文档看,NetworkStatsManager类克服了TrafficStats的查询限制,而且统计信息也不再是设备重启以来的数据。但它也有自己的限制和缺点。
    (1)权限限制
    NetworkStatsManager的使用需要额外的权限,”android.permission.PACKAGE_USAGE_STATS”是系统权限,需要主动引导用户开启应用的“有权查看使用情况的应用”(使用记录访问权限)权限,后面会有代码示例。
    (2)文档不完善
    不好说是文档不全,还是我没找对。首先文档中没有给出类的实例对象的构造方法,一开始还是反射获取的,后来才发现可以通过获取系统服务方式得到。另外queryDetailsForUid函数中设置的时间间隔不太有用,没能及时的获取流量统计信息,而是有两个小时的时间间隔。还好可以在querySummary函数中获得。

    代码示例

    下面说说具体的使用和代码,使用前必须明确的是这里的统计信息都是在网络层以上的数据。
    1.权限设置
    (1)AndroidManifest中添加权限声明

    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.PACKAGE_USAGE_STATS" tools:ignore="ProtectedPermissions"/>

    (2)代码中主动引导用户开启权限
    这里没有说明READ_PHONE_STATE的主动获取,大家根据自己的targetSdkVersion设置

        private boolean hasPermissionToReadNetworkStats() {
            if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
                return true;
            }
            final AppOpsManager appOps = (AppOpsManager) getSystemService(Context.APP_OPS_SERVICE);
            int mode = appOps.checkOpNoThrow(AppOpsManager.OPSTR_GET_USAGE_STATS,
                    android.os.Process.myUid(), getPackageName());
            if (mode == AppOpsManager.MODE_ALLOWED) {
                return true;
            }
    
            requestReadNetworkStats();
            return false;
        }
        // 打开“有权查看使用情况的应用”页面
        private void requestReadNetworkStats() {
            Intent intent = new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS);
            startActivity(intent);
        }
    

    2.查看设备和某应用的流量统计
    (1)获取NetworkStatsManager示例对象

    NetworkStatsManager networkStatsManager = (NetworkStatsManager) getSystemService(NETWORK_STATS_SERVICE);

    (2)查询设备总的流量统计信息

    NetworkStats.Bucket bucket = null;
    // 获取到目前为止设备的Wi-Fi流量统计
    bucket = networkStatsManager.querySummaryForDevice(ConnectivityManager.TYPE_WIFI, "", 0, System.currentTimeMillis());
    Log.i("Info", "Total: " + (bucket.getRxBytes() + bucket.getTxBytes()));

    (3)查询某应用(uid)的数据流量统计信息

    // 获取subscriberId
    TelephonyManager tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
    String subId = tm.getSubscriberId();
    
    NetworkStats summaryStats;
    long summaryRx = 0;
    long summaryTx = 0;
    NetworkStats.Bucket summaryBucket = new NetworkStats.Bucket();
    long summaryTotal = 0;
    
    summaryStats = networkStatsManager.querySummary(ConnectivityManager.TYPE_MOBILE, subId, getTimesMonthmorning(), System.currentTimeMillis());
    do {
        summaryStats.getNextBucket(summaryBucket);
        int summaryUid = summaryBucket.getUid();
        if (uid == summaryUid) {
            summaryRx += summaryBucket.getRxBytes();
            summaryTx += summaryBucket.getTxBytes();
        }
        Log.i(MainActivity.class.getSimpleName(), "uid:" + summaryBucket.getUid() + " rx:" + summaryBucket.getRxBytes() +
    " tx:" + summaryBucket.getTxBytes());
        summaryTotal += summaryBucket.getRxBytes() + summaryBucket.getTxBytes();
    } while (summaryStats.hasNextBucket());

    3.附赠实用函数
    (1)应用包名查uid

    public static int getUidByPackageName(Context context, String packageName) {
        int uid = -1;
        PackageManager packageManager = context.getPackageManager();
        try {
            PackageInfo packageInfo = packageManager.getPackageInfo(packageName, PackageManager.GET_META_DATA);
    
            uid = packageInfo.applicationInfo.uid;
            Log.i(MainActivity.class.getSimpleName(), packageInfo.packageName + " uid:" + uid);
    
    
        } catch (PackageManager.NameNotFoundException e) {
        }
    
        return uid;
    }

    (2)获得本月第一天0点时间

    public static long getTimesMonthMorning() {
            Calendar cal = Calendar.getInstance();
            cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
            cal.set(Calendar.DAY_OF_MONTH, cal.getActualMinimum(Calendar.DAY_OF_MONTH));
            return cal.getTimeInMillis();
        }

    4.提示无权限信息

    15:39:06.531 5276-5276/cn.arainfo.test.android.testapp1 E/AndroidRuntime: FATAL EXCEPTION: main
    Process: cn.arainfo.test.android.testapp1, PID: 5276
    java.lang.SecurityException: Network stats history of uid 10145 is forbidden for caller 10144
        at android.os.Parcel.readException(Parcel.java:1665)
        at android.os.Parcel.readException(Parcel.java:1618)
        at android.net.INetworkStatsSession$Stub$Proxy.getHistoryIntervalForUid(INetworkStatsSession.java:425)
        at android.app.usage.NetworkStats.startHistoryEnumeration(NetworkStats.java:433)
        at android.app.usage.NetworkStatsManager.queryDetailsForUidTag(NetworkStatsManager.java:254)
        at android.app.usage.NetworkStatsManager.queryDetailsForUid(NetworkStatsManager.java:219)

    统计测试

    (1)测试设备
    小米5S Plus Android 6.0 和 华为Mate9 Android 7.0设备上实际测试
    (2)流量差距
    实际测试流量有30M左右,和运营商流量统计相差2M左右

    转载请注明出处:http://blog.csdn.net/w7849516230,欢迎关注微信公众号“编程阳光”
    “编程阳光”微信公众号

    参考链接:
    1.android.net.TrafficStats
    2.android.app.usage.NetworkStatsManager
    3.stack overflow里的两个问题
    http://stackoverflow.com/questions/38783836/how-to-fetch-data-usage-report-for-all-uids-using-the-new-networkstatsmanager-c

    http://stackoverflow.com/questions/36702621/getting-mobile-data-usage-history-using-networkstatsmanager

    展开全文
  • 使用iftop监控网卡实时流量

    千次阅读 2016-07-26 13:43:06
    1.3 使用iftop监控网卡实时流量 安装完iftop工具后,直接输入iftop命令即可显示网卡实时流量信息。在默认情况下,iftop显示系统第一块网卡的流量信息,如果要显示指定网卡信息,可通过“-i”参数实现。 (1)...

    .原文地址 http://book.51cto.com/art/201409/452431.htm

    1.3 使用iftop监控网卡实时流量

    安装完iftop工具后,直接输入iftop命令即可显示网卡实时流量信息。在默认情况下,iftop显示系统第一块网卡的流量信息,如果要显示指定网卡信息,可通过“-i”参数实现。

    (1)iftop输出界面说明

    执行“iftop -P -i em1”命令,得到如图2-1所示的iftop的一个典型输出界面。

    iftop的输出从整体上可以分为三大部分。

    第一部分是iftop输出中最上面的一行,此行信息是流量刻度,用于显示网卡带宽流量。

    第二部分是iftop输出中最大的一个部分,此部分又分为左、中、右三列,左列和中列记录了哪些IP或主机正在和本机的网络进行连接。其中,中列的“=>”代表发送数据,“<=”代表接收数据,通过这个指示箭头可以很清晰地知道两个IP之间的通信情况。最右列又分为三小列,这些实时参数分别表示外部IP连接到本机2s、10s和40s内的平均流量值。另外,这个部分还有一个流量图形条,流量图形条是对流量大小的动态展示,以第一部分中的流量刻度为基准。通过这个流量图形条可以很方便地看出哪个IP的流量最大,进而迅速定位网络中可能出现的流量问题。

    第三部分位于iftop输出的最下面,可以分为三行,其中,“TX”表示发送数据,“RX”表示接收数据,“TOTAL”表示发送和接收的全部流量。与这三行对应的有三列,其中,“cum”列表示从运行iftop到目前的发送、接收和总数据流量;“peak”列表示发送、接收以及总的流量峰值;“rates”列表示过去2s、10s、40s内的平均流量值。

    (2)iftop使用参数说明

    iftop还有很多附加参数和功能。执行“iftop -h”命令即可显示iftop可使用的所有参数信息。iftop常用的参数以及含义如表2-1所示。

    表2-1 iftop常用参数说明
     

    (3)iftop的交互操作

    在iftop的实时监控界面中,还可以对输出结果进行交互式操作,用于对输出信息进行整理和过滤,在图2-1所示界面中,按“h”键即可进入交互选项界面,如图2-2所示。

    iftop的交互功能和Linux下的top命令非常类似,交互参数主要分为四个部分,分别是一般参数、主机显示参数、端口显示参数和输出排序参数。相关参数的含义如表2-2所示。
     

    表2-2 iftop交互参数说明
     

    iftop的强大之处在于它能够实时显示网络的流量状态,监控网卡流量的来源IP和目标地址,这对于检测服务器网络故障、流量异常是非常有用的,只需通过一个命令就能把流量异常或网络故障的原因迅速定位,因此,对于运维人员来说,iftop是必不可少的一个网络故障排查工具。

    展开全文
  • 最近我做的一个安卓app 程序在请求的时候 出现一个很郁闷的问题!...华为手机 android 6.0 WIFI环境不能访问网络 流量情况下可以 程序添加了完全信任 依然不能解决这个问题。 权限已经全部打开了 我就不知道为什么呢?
  • App性能测试——使用GT监控手机流量

    千次阅读 2019-05-12 18:14:24
    使用GT测试流量: 对流量要求没有那么严格的话可以在安卓的设置里面查看 Wireshark:抓包分析工具,也提供了安卓手机的抓包实现,GT中抓包的功能就是 在其提供的实现基础上的易用性封装起来,在本次测试中用...
  • 要实现负载流量均衡,有很多方法,在Linux上LVS是一种不错的选择,然则配置却相对复杂,其实现原理很奇怪,在Netfilter的INPUT链上实现了一个HOOK,然后处理后再将数据包OUTPUT出去。我们知道Netfilter的HOOK方式...
  • 本文介绍php基于redis,使用令牌桶算法,实现访问流量的控制,提供完整算法说明及演示实例,方便大家学习使用。 每当国内长假期或重要节日时,国内的景区或地铁都会人山人海,导致负载过大,部分则会采用限流措施...
  • 使用 Wireshark 调试 HTTP/2 流量

    千次阅读 2018-07-02 14:20:18
    我们知道,HTTP/2 引入了二进制分帧层(Binary Framing),将每个请求和响应分割成为更小的帧,并对它们进行了二进制编码。与此同时,HTTP/2 沿用了之前 HTTP 版本中的绝大部分语义,上层应用基本上感知不到 HTTP/2 ...
  • 我们都在寻找如何让用户黏在自家的APP上的方法,产品设计、内容呈现、功能引导,每一种方法背后都有很大的优化空间,这次我们主要是说说如何使用「深度链接」实现APP外部流量召回和下载归因分析。 |APP外部...
  • 本文笔者将为大家介绍短视频的审核流程和流量分配,审核规则以及审核质量检查。大纲审核流程与流量分配审核规则:审核规则制定,如何细化规则,审核操作审核质量检查:审核指标,质检方法,审核后台一、审核流程1....
  • 今天才知道流量是这么算了,你的流量=上传+下载 起始时间使用时长业务类型费用类型发送字节接收字节费用优惠减免小计2008-11-01 00:33:367分47秒uniwap流量010240.010.000.012008-11-01 00:46:461分56
  • 翻译自...想要统计每一个APP的流量使用,我现在使用的是Android TrafficStats然后我可以得到类似与以下的结果: Youtube 50.30 MBytes Facebook 21.39 MBytes Googl
  • linux下常用流量监控软件的使用说明

    千次阅读 2014-05-13 14:51:36
    在工作中,经常会遇到linux流量查看的问题,所以做好流量监控还是很有必要的,于是研究下linux流量监控的方法,在这里和大家分享一下。下面一一介绍这几款软件和具体实现步骤,希望工作中对大家更好的排查网络流量...
  • 对物联卡,其实大部分的人都知道,这是三大运营商给企业提供的一种连接终端设备的流量卡,是针对工业设备的,个人市场是不允许出现的 网友吐槽:物联卡实际流量只有一半,你们的物联卡都虚标多少? 近日,有网友...
  • 这个时候就涉及到了一个宝贝分享,一般有两种情况,一个是生成图片分享,一个是生成淘口令,好友看到后复制打开淘宝,自动就打开宝贝了,很多人都知道淘口令,但是却不知道淘口令算什么流量来源,今天小编就为大家做...
  • linux管理(二)---网络使用情况的监控

    万次阅读 2016-11-24 15:37:25
    我们经常在监控服务器或者排查程序性能瓶颈时需要知道 网络带宽的使用情况,看看带宽是不是瓶颈。linux系统中监控网络的工具和命令很多。但其实主要分2种,一种是实时监控带宽情况(速度如何),一种是监控流量(传输...
  • 使用mitmproxy解密SSL流量配合Wireshark进行分析,包括手机,PC软件,浏览器的流量
  • 一:微信小程序的流量红利何在?微信小程序的出现,对于习惯于暴力吸粉、搞100000+大流量的“既得利益者”而言,确实有一丝丝的失望和迷茫。为啥呢?因为微信小程序拒绝流量分发,不给转发朋友圈,也不可能有推荐,...
  • 中创物联网认为我们只要抓住应用场景、面向人群这两点,就能够清楚的知道出物联卡流量卡是什么,下面让我们一起来深入了解下吧。 在目前智能化的移动互联网时代物联卡流量卡应用颇多,不管是消防行业、智能家居中.....
  • 流量劫持是网络中常见的网络问些,下面哪些情况会造成流量劫持? MAC地址欺骗、DNS劫持、伪造的DHCP服务器、使用https协议 DNS劫持和MAC 物理地址欺骗是,其他的还在考究,欢迎讨论! 感觉这块知识点不了解...
  • 快速了解TCP的流量控制与拥塞控制

    千次阅读 2019-06-01 21:01:02
    有关TCP你不能不知道的三次握手和四次挥手问题,点我跳转 流量控制 1. 滑动窗口 数据的传送过程中很可能出现接收方来不及接收的情况,这时就需要对发送方进行控制以免数据丢失。利用滑动窗口机制可以很方便地在TCP...
  • 我的手机是红米3S,插上两张手机卡的时候(一张移动的,一张联通的),使用移动卡的流量上网时另一张联通卡会没信号。 2. 解答 一般情况下是由于当地没有2G的联通信号并且手机是单卡4G的手机所造成的。 当地没有2G...
  • TCP的流量控制

    千次阅读 2016-07-14 14:05:48
    TCP使用窗口机制进行流量控制 什么是窗口? 连接建立时,各端分配一块缓冲区用来存储接收的数据,并将缓冲区的尺寸发送给另一端 接收方发送的确认信息中包含了自己剩余的缓冲区尺寸 剩余缓冲区空间的...
  • 使用机器学习算法对流量分类的尝试——基于样本分类 Hochikong • 16-07-06 • 115 人围观 导言 机器学习方法目前可以分为5个流派,分别是符号主义,联结主义,进化主义,贝叶斯和...
  • app流量测试

    千次阅读 2017-03-18 15:43:13
    1.可以让我们很清楚的知道用户在某种场景下使用我们的产品需要消耗多少流量。 2.流量数据分析可以指导我们去做优化。 比如cgi的调用和参数设置是否合理,有些资源或者配置是否可以本地化? 3.流量的优化...
  • ArcGIS水文分析实战教程(5)细说流向与流量

    万次阅读 多人点赞 2017-06-28 20:16:32
    ArcGIS水文分析实战教程(5)细说流向与流量 本章导读:流向分析是ArcGIS水文分析工具的基础,属于GIS技术方面的术语;流量统计则是水文分析用作划分流域、河流等级的指标,属于水文行业术语。在利用ArcGIS软件做...
  • APP性能测试--流量测试

    千次阅读 2018-03-24 16:18:58
    在不同的网络类型之下,我们不仅要控制流量使用,还需要加快请求的响应。流量测试可以给我们带来什么?1.可以让我们很清楚的知道用户在某种场景下使用我们的产品需要消耗多少流量。2.流量数据分析可以指导我们去做...
  • 大数据流量分析

    万次阅读 2019-04-02 09:41:16
    数据分析的本质其实是做数据对比分析,没有数据对比,单一的指标统计往往难以发挥数据价值。...比如我们统计企业2018年1月29日的同比流量,是不是可以直接对比2017年1月29日?表面上看好像2017年1...
  • 软件下载链接 http://gael.roualland.free.fr/ifstat/ 由于下载的是源码包... ./configure --prefix 路径 make make install 安装成功,进入相应的bin目录下直接执行./ifstat即可使用 通常情况可以使用参数 "-T

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 166,462
精华内容 66,584
关键字:

如何知道流量使用情况