接收到的数据,发出的数据,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);

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值