zoukankan      html  css  js  c++  java
  • 获取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];

        

        

        

    }

    工作小记,欢迎共享
  • 相关阅读:
    bash八大扩展一网打尽
    MySQL命令行导出数据库
    Windows 7上的DirectX 11.1
    把KlayGE嵌入其他GUI框架
    KlayGE的资源载入系统
    学习路漫漫……
    写下我的第一篇Post,呵呵
    今天学习:CSS中的类class和标识id选择符(.和#号)
    Remove Duplicates from Unsorted List
    2012 TODO List
  • 原文地址:https://www.cnblogs.com/fannyLi/p/4305096.html
Copyright © 2011-2022 走看看