通过读取系统网络接口信息,获取当前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. jquery的ready方法(DOM是否加载完)详解与使用

    jquery的ready方法(准备DOM触发)还是比较复杂的,我们先看流程图:

  2. two sample ttest & paired ttst

    来源:http://www.pinzhi.org/thread-1023-1-1.html 成对t检验Paired Test是对来自同一总体的样本,在不同条件影响下获取的2组样本进行分析,以评价不同条 ...

  3. workqueue机制分析之process_one_work分析

    工作者线程不断执行,从work_poll结构中卸下一个work, 然后进入函数process_one_work 来执行这个work. process_one_work(struct worker *w ...

  4. QQ浏览器X5内核问题汇总

    原文:http://itindex.net/detail/53391-qq-浏览器-x5 常常被人问及微信中使用的X5内核的问题,其实我也不是很清楚,只知道它是基于android 4.2的webkit ...

  5. 关于编写Java程序让Jvm崩溃

    今天在书上看到一个作者提出一个问题“怎样通过编写Java代码让Jvm崩溃”,我看了之后也不懂.带着问题查了一下,百度知道里面有这样一个答案: package jvm; public class Cra ...

  6. logback + slf4j + jboss + spring mvc

    logback.log4j.log4j2 全是以同一个人为首的团伙搞出来的(日志专业户!),这几个各有所长,log4j性能相对最差,log4j2性能不错,但是目前跟mybatis有些犯冲(log4j2 ...

  7. 日志记录类库log4net的使用总结

    log4net是一个开源的日志记录类库,经过配置后可以自动抓取程序中的错误.异常信息,并写入磁盘,也可以在异常发生时执行其他指定的操作,比如:通知某人右键.写入数据库等.这里写个ASP.NET MVC ...

  8. webpack入坑之旅(二)loader入门

    这是一系列文章,此系列所有的练习都存在了我的github仓库中vue-webpack 在本人有了新的理解与认识之后,会对文章有不定时的更正与更新.下面是目前完成的列表: webpack入坑之旅(一)不 ...

  9. 简单的解释XSS攻击

    XSS 跨站点脚本 cross site script 怎么造成攻击? 举例:有一个公共的页面,所有用户都可以访问且可以保存内容,输入的时候若输入<script>alert('I am h ...

  10. less sass学习总结(——待续哦——)

    一:less.sass是为了解决什么?  为什么要让css以编程语言来书写呢?