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];
}
原文地址:https://www.cnblogs.com/Keys/p/4866537.html