最近要做一个网络流量统计的功能。网上找了下,有直接可以用的。呵呵。

原理:通过函数getifaddrs来得到系统网络接口的信息,网络接口的信息, 包含在if_data字段中, 有很多信息, 但我现在只关心ifi_ibytes, ifi_obytes, 应该就是接收到的字节数和发送的字节数, 加起来就是流量了. 还发现, 接口的名字, 有en, pdp_ip, lo等几种形式, en应该是wifi, pdp_ip大概是3g或者gprs, lo是环回接口, 通过名字区分可以分别统计

直接上代码:

添加头

#include <ifaddrs.h>

#include <sys/socket.h>

#include <net/if.h>

1.3G/GPRS流量统计

int getGprs3GFlowIOBytes() {

struct ifaddrs *ifa_list= 0, *ifa;

if (getifaddrs(&ifa_list)== -1) {

return 0;

}

uint32_t iBytes =0;

uint32_t oBytes =0;

for (ifa = ifa_list; ifa; ifa = ifa->ifa_next)

{

if (AF_LINK!= ifa->ifa_addr->sa_family)

continue;

if (!(ifa->ifa_flags& IFF_UP) &&!(ifa->ifa_flags& IFF_RUNNING))

continue;

if (ifa->ifa_data== 0)

continue;

if (!strcmp(ifa->ifa_name,"pdp_ip0")) {

struct if_data *if_data = (struct if_data*)ifa->ifa_data;

iBytes += if_data->ifi_ibytes;

oBytes += if_data->ifi_obytes;

NSLog(@"%s :iBytes is %d, oBytes is %d",ifa->ifa_name, iBytes, oBytes);

}

}

freeifaddrs(ifa_list);

return iBytes + oBytes;

}

返回的结果为byte

2.WIFI流量统计功能

- (long long int)getInterfaceBytes {

struct ifaddrs *ifa_list = 0, *ifa;

if (getifaddrs(&ifa_list) == -1) {

return 0;

}

uint32_t iBytes = 0;

uint32_t oBytes = 0;

for (ifa = ifa_list; ifa; ifa = ifa->ifa_next) {

if (AF_LINK != ifa->ifa_addr->sa_family)

continue;

if (!(ifa->ifa_flags & IFF_UP) && !(ifa->ifa_flags & IFF_RUNNING))

continue;

if (ifa->ifa_data == 0)

continue;

/* Not a loopback device. */

if (strncmp(ifa->ifa_name, "lo", 2))

{

struct if_data *if_data = (struct if_data *)ifa->ifa_data;

iBytes += if_data->ifi_ibytes;

oBytes += if_data->ifi_obytes;

//            NSLog(@"%s :iBytes is %d, oBytes is %d",

//                  ifa->ifa_name, iBytes, oBytes);

}

}

freeifaddrs(ifa_list);

return iBytes+oBytes;

}

以上获取的数据可以通过以下方式进行单位转换

NSString *bytesToAvaiUnit(int bytes) {

if(bytes < 1024)  // B {

return [NSString stringWithFormat:@"%dB", bytes];

}

else if(bytes >= 1024 && bytes < 1024 * 1024) // KB {

return [NSString stringWithFormat:@"%.1fKB", (double)bytes / 1024];

}

else if(bytes >= 1024 * 1024 && bytes < 1024 * 1024 * 1024) // MB {

return [NSString stringWithFormat:@"%.2fMB", (double)bytes / (1024 * 1024)];

}

else // GB{

return [NSString stringWithFormat:@"%.3fGB", (double)bytes / (1024 * 1024 * 1024)];

}

}

iOS-网络流量统计相关推荐

  1. php怎么统计流量,PHP学习笔记:php网络流量统计系统

    PHP学习笔记:php网络流量统计系统 说明:代码来源<PHP和MySQL Web应用开发>一书,还有就是代码有些是经过修改的,经过我的测验全部都可以用. 这里面ip地址显示的正常的,我电 ...

  2. 【总结】一些网络流量统计的网站及工具

    DU METER V3.06 Build 192 汉化版 软件大小:924 KB 软件类别:网络工具 / 网络监测 运行环境:WinNet, WinXP, Win2K, NT, WinME, Win9 ...

  3. 网络流量统计using ADB

    /proc/net/xt_qtaguid/stats 基本覆盖目前所有机型且统计流量全面 adb shell cat /proc/net/xt_qtaguid/stats | grep (uid#) ...

  4. linux 进程流量统计,Linux进程网络流量统计方法及实现

    1 前言 在某些应用安全场景须要结合进程级网络链接.流入流出流量等数据直接分析出进程的异常.例如,在内网主机上是否存在持续恶意外传敏感数据的现象.在网络监控时发现服务器大量带宽被占用但不清楚由系统具体 ...

  5. linux网络流量统计,linux下网络流量监控统计

    最近在做虚拟化迁入评估,其中很重要的一项就是流量的问题.现在部署一个工具和脚本用来统计服务器的网络流量. linux下监控流量的工具有很多,比如ifstat.iftop等. 个人还是喜欢ifstat, ...

  6. ifstat 网络流量统计工具

    ifstat---实时报告接口状态,是一个网络流量监测程序,能查看网卡的流出和流入的字节. 简单描述:ifstat就像iostat/vmstat描述其它的系统状况一样,是一个统计网络接口活动状态的工具 ...

  7. Linux进程网络流量统计方法及实现

    1 前言 在某些应用安全场景需要结合进程级网络连接.流入流出流量等数据直接分析出进程的异常.例如,在内网主机上是否存在持续恶意外传敏感数据的现象.在网络监控时发现服务器大量带宽被占用但不清楚由系统具体 ...

  8. java 网络流量统计_IP数据包的流量统计(JAVA语言)

    如果不显示图片,或者出现排版错误,抽风,崩坏,节操丢失等一系列不正常情况,请点击下面链接观看,点我 IP数据包的流量统计(JAVA语言) 要求:编制程序,监控网络,捕获一段时间内网络上的IP数据包,按 ...

  9. iOS客户端流量统计

    自己统计流量的话 需要判断是3G访问还是WIFI访问 用 NSURLProtocol 自定义一个这个 累计DATA就是下行流量 #include <arpa/inet.h> #includ ...

  10. Linux环境 网络流量统计/proc/net/dev和/proc/net/snmp

    在Linux系统中,系统调用是操作系统提供给应用程序使用操作系统服务的重要接口,但同时也正是通过系统调用机制,操作系统屏蔽了用户直接访问系统内核的可能性.幸运的是Linux提供了LKM机制可以使我们在 ...

最新文章

  1. MIT警示“深度学习过度依赖算力”,研究三年算法不如用10倍GPU
  2. pandas统计缺失值的个数
  3. 天正暖通天圆地方在哪_2020位于太白山景区海拔3511米天圆地方景点就变成了很多人望而却步的地方_天圆地方-评论-去哪儿攻略...
  4. 在ASP.NET使用javascript的一点小技巧(转www.chinacs.net 中文C#技术站 )
  5. 设计灵感|如果你喜欢多彩的配色搭配!看这里!
  6. 常用Python标准库对象速查表(1)
  7. Typora如何设置图片的默认保存路径
  8. 【滑动窗口】leetcode1456:定长子串中元音的最大数目
  9. 我们和优秀工程师的差距在哪儿
  10. 【转载】高速电路设计中的电源地
  11. python简单代码恶搞-一个可以套路别人的python小程序实例代码
  12. 联邦学习后门攻击代码阅读——backdoors101
  13. 1KB文件夹快捷方式病毒清除(转)
  14. 如何使用FFmpeg命令处理音视频
  15. 001.学习Python之-设置你的操作系统的环境变量,以便可以轻松进入 Python 环境
  16. cdr 表格自动填充文字_当文字内容太多excel单元格盛不下应该怎么做
  17. stm32入门(四): 串口
  18. Enhancer和MethodInterceptor的需要导入的jar
  19. FCKeditor 介绍
  20. Python-批处理调整音频文件的音量大小

热门文章

  1. 制作ubuntu根文件系统
  2. Chinco(摩客串串)——App原型交互演示利器
  3. elasticsearch系列一:elasticsearch(ES简介、安装amp;配置、集成Ikanalyzer)
  4. 中科大少年班,官方公布48名新生名单,有人因偶像曹原,有人只是不想经历高三...
  5. 工地施工最靠谱的监测,系统扬尘预警监测解决方案
  6. c语言scanf返回值被忽略,scanf返回值问题
  7. bing的搜索api简介
  8. 简单的3DSOM建模步骤
  9. 柑橘病虫害识别方案总结
  10. ios realm 文件_Realm在iOS上的使用