• 获取mac地址


    导入系统框架:

    #import <ifaddrs.h>

    #import <arpa/inet.h>

     

    #include <sys/socket.h>

    #include <sys/sysctl.h>

     

    #include <net/if.h>

    #include <net/if_dl.h>

     

    代码:

    //ip

    - (NSString *)getIPAddress {

        

        NSString *address = @"error";

        

        struct ifaddrs *interfaces = NULL;

        

        struct ifaddrs *temp_addr = NULL;

        

        int success = 0;

        

        // retrieve the current interfaces - returns 0 on success

        

        success = getifaddrs(&interfaces);

        

        if (success == 0) {

            

            // Loop through linked list of interfaces

            

            temp_addr = interfaces;

            

            while(temp_addr != NULL) {

                

                if(temp_addr->ifa_addr->sa_family == AF_INET) {

                    

                    // Check if interface is en0 which is the wifi connection on the iPhone

                    

                    if([[NSString stringWithUTF8String:temp_addr->ifa_name] isEqualToString:@"en0"]) {

                        

                        // Get NSString from C String

                        

                        address = [NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)temp_addr->ifa_addr)->sin_addr)];

                        

                    }

                    

                }

                

                temp_addr = temp_addr->ifa_next;

                

            }

            

        }

        

        // Free memory

        

        freeifaddrs(interfaces);

        

        return address;

        

    }

     

     

    //MAC

    - (NSString *)getMacAddress

     

    {

        

        int mib[6];

        

        size_t len;

        

        char *buf;

        

        unsigned char *ptr;

        

        struct if_msghdr *ifm;

        

        struct sockaddr_dl *sdl;

        

        

        

        mib[0] = CTL_NET;

        

        mib[1] = AF_ROUTE;

        

        mib[2] = 0;

        

        mib[3] = AF_LINK;

        

        mib[4] = NET_RT_IFLIST;

        

        

        

        if ((mib[5] = if_nametoindex("en0")) == 0) {

            

            printf("Error: if_nametoindex error/n");

            

            return NULL;

            

        }

        

        

        

        if (sysctl(mib, 6, NULL, &len, NULL, 0) < 0) {

            

            printf("Error: sysctl, take 1/n");

            

            return NULL;

            

        }

        

        

        

        if ((buf = malloc(len)) == NULL) {

            

            printf("Could not allocate memory. error!/n");

            

            return NULL;

            

        }

        

        

        

        if (sysctl(mib, 6, buf, &len, NULL, 0) < 0) {

            

            printf("Error: sysctl, take 2");

            

            return NULL;

            

        }

        

        

        

        ifm = (struct if_msghdr *)buf;

        

        sdl = (struct sockaddr_dl *)(ifm + 1);

        

        ptr = (unsigned char *)LLADDR(sdl);

        

        NSString *outstring = [NSString stringWithFormat:@"%02x:%02x:%02x:%02x:%02x:%02x", *ptr, *(ptr+1), *(ptr+2), *(ptr+3), *(ptr+4), *(ptr+5)];

        

        free(buf);

        

        return [outstring uppercaseString];

        

        

        

    }

    工作小记,欢迎共享
  • 相关阅读:
    knowledge_maven
    problems_springboot
    problems_halo
    skills_oracle
    hive启动报错(整合spark)
    根据父ID聚合
    sql2005数据库远程备份
    waitfor的使用
    CTE+操作性语句(删除无主键的相同的多行数据)+CTE操作技巧
    SQL中的CTE,查询所有的子集(子集的子集)比游标效率高
  • 原文地址:https://www.cnblogs.com/fannyLi/p/4305096.html
Copyright © 2020-2023  润新知