2013-01-21 8 views
0

iphone의 기본 설정을 통해 Wi-Fi 및 데이터의 트래픽 사용량을 확인할 수 있음을 알고 있습니다. 그러나 장치의 실시간 네트워크 사용 (업로드/다운로드)을 가져 오는 라이브러리 또는 기능과 같은 솔루션이 있습니까? (실시간 netstat처럼)iOS의 실시간 네트워크 통계

도달 가능성은 내가 언급 한 것들 중 하나입니다. http://developer.apple.com/library/ios/#samplecode/Reachability/Introduction/Intro.html#//apple_ref/doc/uid/DTS40007324-Intro-DontLinkElementID_2

이 응용 프로그램은 비슷한 작업을 수행합니다 https://itunes.apple.com/us/app/data-control-manage-data-usage/id390646992?mt=8

사람이 전화 또는 실시간 트래픽에 액세스 할 수있는 확실한 방법을 찾기 위해 어떤 클래스를 알고 있나요?

제 질문이 이해되기를 바랍니다.

+0

당신은 귀하의 응용 프로그램 또는 전반적인 사용량을 추적하는거야? – sangony

답변

0

iOS에 해당 API가없고 언급 한 App (및 모든 유사한 앱)은 이동 통신사에서 제공 한 API를 사용하거나 이동 통신사 웹 사이트를 구문 분석합니다. 이러한 유형의 앱을 구현하려는 경우 관심있는 모든 가능한 이동 통신사에 대해 뭔가를 찾아야 할까봐 걱정됩니다.

0

iOS를 지원하는 상위 수준의 API는 없지만 iOS는 단순히 예쁘기 때문에 유닉스에서는 물론 표준 API를 사용할 수있다.

이 경우 장치의 다양한 인터페이스를 설명하는 메모리 구조를 검색하는 getifaddrs를 찾고있을 것입니다.

그런 다음 원하는 인터페이스 세부 정보를 얻기 위해 이러한 C 구조를 구문 분석해야합니다.

은 문서화 된 (사람 getifaddr)이며이를 사용할 수 있습니다.

약간의 코드가 추가되지만 처음에는 몇 가지주의 사항이 추가됩니다. 애플은이 물건을 유지 관리하는 것을 정말로 신경 쓰지 않아서 네트워크 수는 32 비트이므로 4Gb 롤오버를 처리해야합니다. 패킷 수는 대부분 거기에 있습니다, 나는 tx 패킷 수는 항상 0이지만 누가 패킷 수에 관심이 있다고 생각합니다.

getifaddrs를 검색하면 더 나은 코드를 쉽게 찾을 수 있지만 시작하려면 간단한 버전을 사용하십시오.

#include <sys/types.h> 
#include <sys/sysctl.h> 
#include <sys/socket.h> 
#include <ifaddrs.h> 
#include <net/if_var.h> 

    struct ifaddrs* addrs; 

    int getIFAddrsResult = getifaddrs(&addrs); 
    if (getIFAddrsResult == 0) 
    { 
     struct ifaddrs* addrsPtr = addrs; // need to keep original for freeifaddrs 
     while (addrsPtr != NULL) 
     { 
      NSString *name = [NSString stringWithFormat:@"%s",addrsPtr->ifa_name]; 
      //NSLog(@"ifa_name %s == %@\n", cursor->ifa_name,name); 
      // names of interfaces: en0 is WiFi ,pdp_ip0 is WWAN 

      if (addrsPtr->ifa_addr->sa_family == AF_LINK) 
      { 
       const struct if_data* stats = (const struct if_data *) addrsPtr->ifa_data; 

       // We only consider the active data interface, and that will normally be the '0' interface. 
       if ([name isEqualToString:@"en0"]) 
       { 
        // Wifi 
        // look at stats->ifi_obytes & ifi_ibytes 

       } else if ([name isEqualToString:@"pdp_ip0"]) 
       { 
        // mobile broad band 
       } else { 
        // could be bluetooth, usb, ad hoc wifi, out of band signalling... 
       } 
      } 

      addrsPtr = addrsPtr->ifa_next; 
     } 

     freeifaddrs(addrs); 
    } else { 
     NSLog(@"getifaddrs failed with error : %s", strerror(getIFAddrsResult)); 
     return nil; 
    } 

P. 내 다이아몬드 부활 오래된 질문 배지 갈거야 :)