通过读取系统网络接口信息,获取当前iphone设备的流量相关信息,统计的是上次开机至今的流量信息. 2

倒入库:

  1. SystemConfiguration.framework

加入头文件:

  1. #include <ifaddrs.h>
  2. #include <sys/socket.h>
  3. #include <net/if.h>

流量统计功能

  1. -(NSString *)bytesToAvaiUnit:(int)bytes
  2. {
  3. if(bytes < 1024)     // B
  4. {
  5. return [NSString stringWithFormat:@"%dB", bytes];
  6. }
  7. else if(bytes >= 1024 && bytes < 1024 * 1024) // KB
  8. {
  9. return [NSString stringWithFormat:@"%.1fKB", (double)bytes / 1024];
  10. }
  11. else if(bytes >= 1024 * 1024 && bytes < 1024 * 1024 * 1024)   // MB
  12. {
  13. return [NSString stringWithFormat:@"%.2fMB", (double)bytes / (1024 * 1024)];
  14. }
  15. else    // GB
  16. {
  17. return [NSString stringWithFormat:@"%.3fGB", (double)bytes / (1024 * 1024 * 1024)];
  18. }
  19. }
  20. -(void)checkNetworkflow{
  21. struct ifaddrs *ifa_list = 0, *ifa;
  22. if (getifaddrs(&ifa_list) == -1)
  23. {
  24. return;
  25. }
  26. uint32_t iBytes     = 0;
  27. uint32_t oBytes     = 0;
  28. uint32_t allFlow    = 0;
  29. uint32_t wifiIBytes = 0;
  30. uint32_t wifiOBytes = 0;
  31. uint32_t wifiFlow   = 0;
  32. uint32_t wwanIBytes = 0;
  33. uint32_t wwanOBytes = 0;
  34. uint32_t wwanFlow   = 0;
  35. struct timeval time ;
  36. for (ifa = ifa_list; ifa; ifa = ifa->ifa_next)
  37. {
  38. if (AF_LINK != ifa->ifa_addr->sa_family)
  39. continue;
  40. if (!(ifa->ifa_flags & IFF_UP) && !(ifa->ifa_flags & IFF_RUNNING))
  41. continue;
  42. if (ifa->ifa_data == 0)
  43. continue;
  44. // Not a loopback device.
  45. // network flow
  46. if (strncmp(ifa->ifa_name, "lo", 2))
  47. {
  48. struct if_data *if_data = (struct if_data *)ifa->ifa_data;
  49. iBytes += if_data->ifi_ibytes;
  50. oBytes += if_data->ifi_obytes;
  51. allFlow = iBytes + oBytes;
  52. time = if_data->ifi_lastchange;
  53. // NSLog(@"1111===%s :iBytes is %d, oBytes is %d", ifa->ifa_name, iBytes, oBytes);
  54. }
  55. //<span style="font-family: Tahoma, Helvetica, Arial, 宋体, sans-serif; ">WIFI流量统计功能</span>
  56. if (!strcmp(ifa->ifa_name, "en0"))
  57. {
  58. struct if_data *if_data = (struct if_data *)ifa->ifa_data;
  59. wifiIBytes += if_data->ifi_ibytes;
  60. wifiOBytes += if_data->ifi_obytes;
  61. wifiFlow    = wifiIBytes + wifiOBytes;
  62. }
  63. //<span style="font-family: Tahoma, Helvetica, Arial, 宋体, sans-serif; ">3G和GPRS流量统计</span>
  64. if (!strcmp(ifa->ifa_name, "pdp_ip0"))
  65. {
  66. struct if_data *if_data = (struct if_data *)ifa->ifa_data;
  67. wwanIBytes += if_data->ifi_ibytes;
  68. wwanOBytes += if_data->ifi_obytes;
  69. wwanFlow    = wwanIBytes + wwanOBytes;
  70. //NSLog(@"111122===%s :iBytes is %d, oBytes is %d",  ifa->ifa_name, iBytes, oBytes);
  71. }
  72. }
  73. freeifaddrs(ifa_list);
  74. NSString *changeTime=[NSString stringWithFormat:@"%s",ctime(&time)];
  75. NSLog(@"changeTime==%@",changeTime);
  76. NSString *receivedBytes= [self bytesToAvaiUnit:iBytes];
  77. NSLog(@"receivedBytes==%@",receivedBytes);
  78. NSString *sentBytes       = [self bytesToAvaiUnit:oBytes];
  79. NSLog(@"sentBytes==%@",sentBytes);
  80. NSString *networkFlow      = [self bytesToAvaiUnit:allFlow];
  81. NSLog(@"networkFlow==%@",networkFlow);
  82. NSString *wifiReceived   = [self bytesToAvaiUnit:wifiIBytes];
  83. NSLog(@"wifiReceived==%@",wifiReceived);
  84. NSString *wifiSent       = [self bytesToAvaiUnit: wifiOBytes];
  85. NSLog(@"wifiSent==%@",wifiSent);
  86. NSString *wifiBytes      = [self bytesToAvaiUnit:wifiFlow];
  87. NSLog(@"wifiBytes==%@",wifiBytes);
  88. NSString *wwanReceived   = [self bytesToAvaiUnit:wwanIBytes];
  89. NSLog(@"wwanReceived==%@",wwanReceived);
  90. NSString *wwanSent       = [self bytesToAvaiUnit:wwanOBytes];
  91. NSLog(@"wwanSent==%@",wwanSent);
  92. NSString *wwanBytes      = [self bytesToAvaiUnit:wwanFlow];
  93. NSLog(@"wwanBytes==%@",wwanBytes);
  94. }

主要方法就是上面的,然后在你想要知道的结果的地方调用就ok了。

  1. [self checkNetworkflow];

结果:

  1. 2013-03-30 23:45:33.565 Reachability[2993:707] changeTime==Sat Mar 30 09:52:09 2013
  2. 2013-03-30 23:45:33.567 Reachability[2993:707] receivedBytes==62.73MB
  3. 2013-03-30 23:45:33.569 Reachability[2993:707] sentBytes==8.22MB
  4. 2013-03-30 23:45:33.571 Reachability[2993:707] networkFlow==70.94MB
  5. 2013-03-30 23:45:33.573 Reachability[2993:707] wifiReceived==55.40MB
  6. 2013-03-30 23:45:33.575 Reachability[2993:707] wifiSent==5.41MB
  7. 2013-03-30 23:45:33.577 Reachability[2993:707] wifiBytes==60.81MB
  8. 2013-03-30 23:45:33.579 Reachability[2993:707] wwanReceived==7.33MB
  9. 2013-03-30 23:45:33.581 Reachability[2993:707] wwanSent==2.81MB
  10. 2013-03-30 23:45:33.583 Reachability[2993:707] wwanBytes==10.14MB

当然你也可以只统计3G/GPRS流量统计 或者 WIFI流量统计。

iOS获取流量参考的更多相关文章

  1. iOS 获取流量

    #include <arpa/inet.h> #include <net/if.h> #include <ifaddrs.h> #include <net/i ...

  2. iOS获取设备型号、装置类型等信息

    iOS获取设备型号.设备类型等信息 设备标识 关于设备标识,历史上盛行过很多英雄,比如UDID.Mac地址.OpenUDID等,然而他们都陆陆续续倒在了苹果的门下.苹果目前提供了2个方法供App获取设 ...

  3. iOS获取UUID

    转自:<iOS获取设备的唯一标识的方法总结以及最好的方法> 参考:<获取iOS设备唯一标识> 总结一下: 1.代码采用CFUUID+KeyChain的实现方式. 2.CFUUI ...

  4. iOS手机流量抓包rvictl

    移动设备抓包主要方式 一.PC上设置网络共享,生成Wi-Fi热点供移动设备使用,PC上再使用tcpdump.Wireshark等捕获分析: 二.PC上开启http代理工具服务器(如Charles.fi ...

  5. iOS编码规范参考

    目录      注释 1.1  多行注释 1.2  单行注释 1.3  函数的注释   命名 2.1  常量的命名 2.2  函数的命名 2.3  变量的命名 2.3.1  成员变量 2.3.2  公 ...

  6. iOS 网络流量统计

    在开发中,有时候需要获取流量统计信息.研究发现:通过函数getifaddrs来得到系统网络接口的信息,网络接口的信息,包含在if_data字段中, 有很多信息, 但我现在只关心ifi_ibytes,  ...

  7. iOS获取设备唯一标识的8种方法

    8种iOS获取设备唯一标识的方法,希望对大家有用. UDID UDID(Unique Device Identifier),iOS 设备的唯一识别码,是一个40位十六进制序列(越狱的设备通过某些工具可 ...

  8. iOS 获取文件的目录路径的几种方法 [转]

    iOS 获取文件的目录路径的几种方法 2 years ago davidzhang iphone沙箱模型的有四个文件夹,分别是什么,永久数据存储一般放在什么位置,得到模拟器的路径的简单方式是什么. d ...

  9. Swift3.0 iOS获取当前时间 - 年月日时分秒星期

    Swift3.0 iOS获取当前时间 - 年月日时分秒星期func getTimes() -> [Int] { var timers: [Int] = [] // 返回的数组 let calen ...

随机推荐

  1. iOS Block 内存管理的探讨

    在很多情况下Block是造成程序循环引用内存泄漏的元凶.下面我们就讲解一下block对内存管理的影响.在讲解之前.希望大家对block有一定的了解.如果大家还不是太清楚block的实现原理.希望大家可 ...

  2. 学习CSS的瓶颈

    何为学习瓶颈 学习到了一定的阶段,就很难继续提高水平的一种现象 这是很多人都正面对的,但同时自己并未意识到. 既然是瓶颈,那么一旦突破了,就是广阔天空! 你是否经常面对这样的情景: 遇到一个奇葩问题, ...

  3. 运用.net core配合VS 2015制作nuget包

    from:http://www.cnblogs.com/zeusro/p/5171084.html 运用.net core配合VS 2015制作nuget包 以往做nuget包我们一般要么用命令行,要 ...

  4. 用Docker封装一个web应用(Django)

    一.复用以前一个封装了SSH的镜像,如果没有封装SSH,可以使用自己的镜像或参考我以前博文:叫板OpenStack:用Docker实现私有云 的前五步 接下来便是正题. 二.部署过程 1.查看镜像 R ...

  5. c语言 指针与地址的区别

    指针由两部分组成,指针的类型和指针的值(也就是变量的地址). 指针和地址的区别: 地址只是一堆十六进制的字符,对应着内存条的某段内存, 而指针本身有地址,指针的值也是一个地址,指针本身还有类型,这与单 ...

  6. Ice的HelloWorld(Java)

    Ice是一种面向对象的中间间平台,入门ice,简单的HelloWorld是必不可少的. 转载请注明http://www.cnblogs.com/zrtqsk/p/3745286.html,谢谢. 一. ...

  7. 完全背包变型题(hdu5410)

    这是2015年最后一场多校的dp题,当时只怪自己基础太差,想了1个多小时才想出来,哎,9月份好好巩固基础,为区域赛做准备.题目传送门 题目的意思是给你n元钱,m类糖果,每类糖果分别有p, a, b, ...

  8. Windows下Memcache的安装及PHP扩展配置

    一.下载 找到完整的memcache的Windows安装包,解压放在硬盘上,比如 F:\memcached.exe 二.安装 WIN7 64位双击打开这个exe可能只有一个空的窗口,不能输入任何命令, ...

  9. 高性能JavaScript 加载和执行

    前言 本章主要讲述如何加载脚本使得用户能有良好的用户体验,而核心内容就是JavaScript的异步加载.之前写过一篇不得不说的JavaScript异步加载,相似的内容就不多加描述,讲些不同的东西,主要 ...

  10. AndFix热修复 —— 实战与源码解析

    当你的应用发布后第二天却发现一个重要的bug要修复,头疼的同时你可能想着赶紧修复重新打个包发布出去,让用户收到自动更新重新下载.但是万事皆有可能,万一隔一天又发现一个急需修复的bug呢?难道再次发布打 ...