zoukankan      html  css  js  c++  java
  • iOS流量监控

    http://code4app.com/snippets/one/iOS%E6%B5%81%E9%87%8F%E7%9B%91%E6%8E%A7/5020ba7a6803fae325000000

     

    1.能够检测iOS的WIFI,3G以及GPS的流量。

    -(void)checkNetworkflow{

        struct ifaddrs *ifa_list = 0, *ifa;
        if (getifaddrs(&ifa;_list) == -1)
        {
            return;
        }
          
        uint32_t iBytes     = 0;
        uint32_t oBytes     = 0;
        uint32_t allFlow    = 0;
        uint32_t wifiIBytes = 0;
        uint32_t wifiOBytes = 0;
        uint32_t wifiFlow   = 0;
        uint32_t wwanIBytes = 0;
        uint32_t wwanOBytes = 0;
        uint32_t wwanFlow   = 0;
        struct timeval time ;
          
        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.
            // network flow
            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;
                allFlow = iBytes + oBytes;
                time = if_data->ifi_lastchange;
            }
              
            //wifi flow
            if (!strcmp(ifa->ifa_name, "en0"))  
            {  
                struct if_data *if_data = (struct if_data *)ifa->ifa_data;  
                  
                wifiIBytes += if_data->ifi_ibytes;  
                wifiOBytes += if_data->ifi_obytes;
                wifiFlow    = wifiIBytes + wifiOBytes;
            }  
              
            //3G and gprs flow
            if (!strcmp(ifa->ifa_name, "pdp_ip0"))  
            {  
                struct if_data *if_data = (struct if_data *)ifa->ifa_data;  
                  
                wwanIBytes += if_data->ifi_ibytes;  
                wwanOBytes += if_data->ifi_obytes;  
                wwanFlow    = wwanIBytes + wwanOBytes;
            }
        }
        freeifaddrs(ifa_list);    
    }
     
    2.iOS获取设备流量使用情况,iPhone Data Usage Tracking/Monitoring,获取的是开机后WIFI,3G/GPRS网络下使用流量(仅仅只能获取开机后的)。
     
    #include <arpa/inet.h>
    #include <net/if.h>
    #include <ifaddrs.h>
    #include <net/if_dl.h>
     
    + (NSArray *)getDataCounters
    {
        BOOL   success;
        struct ifaddrs *addrs;
        const struct ifaddrs *cursor;
        const struct if_data *networkStatisc; 
      
        int WiFiSent = 0;
        int WiFiReceived = 0;
        int WWANSent = 0;
        int WWANReceived = 0;
      
        NSString *name=[[[NSString alloc]init]autorelease];
      
        success = getifaddrs(&addrs;) == 0;
        if (success) 
        {
            cursor = addrs;
            while (cursor != NULL
            {
                name=[NSString stringWithFormat:@"%s",cursor->ifa_name];
                NSLog(@"ifa_name %s == %@ ", cursor->ifa_name,name);
                // names of interfaces: en0 is WiFi ,pdp_ip0 is WWAN 
                if (cursor->ifa_addr->sa_family == AF_LINK) 
                {
                    if ([name hasPrefix:@"en"]) 
                    {
                        networkStatisc = (const struct if_data *) cursor->ifa_data;
                        WiFiSent+=networkStatisc->ifi_obytes;
                        WiFiReceived+=networkStatisc->ifi_ibytes;
                        NSLog(@"WiFiSent %d ==%d",WiFiSent,networkStatisc->ifi_obytes);
                        NSLog(@"WiFiReceived %d ==%d",WiFiReceived,networkStatisc->ifi_ibytes);
                    }
                    if ([name hasPrefix:@"pdp_ip"]) 
                    {
                        networkStatisc = (const struct if_data *) cursor->ifa_data;
                        WWANSent+=networkStatisc->ifi_obytes;
                        WWANReceived+=networkStatisc->ifi_ibytes;
                        NSLog(@"WWANSent %d ==%d",WWANSent,networkStatisc->ifi_obytes);
                        NSLog(@"WWANReceived %d ==%d",WWANReceived,networkStatisc->ifi_ibytes);
                   
                }
                cursor = cursor->ifa_next;
            }
            freeifaddrs(addrs);
        }       
        return [NSArray arrayWithObjects:[NSNumber numberWithInt:WiFiSent],
             [NSNumber numberWithInt:WiFiReceived],
             [NSNumber numberWithInt:WWANSent],
             [NSNumber numberWithInt:WWANReceived], nil];
    }
  • 相关阅读:
    终端解析 规格严格
    用HQ时,出现了一个Bug 规格严格
    GC这篇文章介绍得很基本 规格严格
    DB2协议研究 规格严格
    JVM monitoring 规格严格
    很有趣的GC内容 规格严格
    在linux内核中修改TCP MSS值 规格严格
    最近为项目写了一个调试模块,由此想到的一些内容 规格严格
    Java中国象棋博弈程序探秘[3]——着法合法性判断
    NetBeans 时事通讯(刊号 # 10 Jun 03, 2008)
  • 原文地址:https://www.cnblogs.com/Keys/p/4866537.html
Copyright © 2011-2022 走看看