接收到的數據,發出的數據,ip地址(Fit fot iOS,OS X)

//實現都是UNIX網絡的編程,比較底層,可以考慮改爲C,C++來單獨寫個可以跨平臺的模塊

+ (void) checkInfoWithCompleteHandler:(void(^)(NSString * ipAddress,

                                               NSString * macAddress,

                                               NSString * receiveDataShowString,

                                               NSString * postDataShowString,

                                               NSString * ssid))completeHandler {

    /*

     struct ifaddrs {

     struct ifaddrs  *ifa_next;                 // ifa_next指向鏈表的下一個成員

     char *ifa_name;                      //ifa_name是接口名稱

     unsigned int ifa_flags;                 //ifa_flags是接口的標識位

     struct sockaddr *ifa_addr;

     struct sockaddr *ifa_netmask;       //ifa_netmask存儲該接口的子網掩碼

     struct sockaddr *ifa_dstaddr;

     void *ifa_data;                          //ifa_data存儲了該接口協議族的特殊信息,它通常是NULL(一般不關注他)

     };

     

     struct sockaddr_in {

     __uint8_t sin_len;

     sa_family_t sin_family;

     in_port_t sin_port;

     struct in_addr sin_addr;

     char sin_zero[8];

     };

     */


    struct ifaddrs *ifa_list = 0, *ifa;

    if (getifaddrs(&ifa_list) == -1) //函數getifaddrsint getifaddrs (struct ifaddrs **__ifap))獲取本地網絡接口信息

        //函數執行成功返回0,失敗返回-1

    {

        return;

    }

   

    uint32_t iBytes = 0;

    uint32_t oBytes = 0;

    NSString * ipAddress;

    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))//  就實際功用而言,兩者都代表了網絡裝置是否正常啓用,但是更仔細觀察可以發現拔除網絡線時會造成 IFF_RUNNING 的改變,至於 IFF_UP 不會因插拔網絡線而有任何變化。

            continue;

        

        /* Not a loopback device. */

        //IP Address

        const char *ip = inet_ntoa(((struct sockaddr_in *)ifa->ifa_addr)->sin_addr);

        

        if (!ipAddress || [ipAddress rangeOfString:@"192.168."].location == NSNotFound) {

            ipAddress = [NSString stringWithCString:ip encoding:NSUTF8StringEncoding];

        }

       

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

        if (if_data)

        {

            iBytes += if_data->ifi_ibytes;

            oBytes += if_data->ifi_obytes;

        }

    }

    NSString * iBytesString = [NSString stringWithFormat:@"%.2f MB",iBytes/1024.0/1024.0];

    NSString * oBytesString = [NSString stringWithFormat:@"%.2f MB",oBytes/1024.0/1024.0];

    NSString * macString = [NetEyeIII getMacAddress];

    NSString * ssid = [NetEyeIII ssid];

    if (completeHandler) {

        completeHandler(ipAddress,macString,iBytesString,oBytesString,ssid);

    }

    freeifaddrs(ifa_list);

}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章