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 ;
     }
      
     uint 3 2 _t iBytes     = 0 ;
     uint 3 2 _t oBytes     = 0 ;
     uint 3 2 _t allFlow    = 0 ;
     uint 3 2 _t wifiIBytes = 0 ;
     uint 3 2 _t wifiOBytes = 0 ;
     uint 3 2 _t wifiFlow   = 0 ;
     uint 3 2 _t wwanIBytes = 0 ;
     uint 3 2 _t wwanOBytes = 0 ;
     uint 3 2 _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, "en 0 "))  
         {  
             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_ip 0 "))  
         {  
             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 == %@\n" , 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值