Friday, November 21, 2014

iOS MAC 주소 알아내기

iOS에서 MAC 주소를 알아내는 소스이다.

//MAC
#include <sys/types.h>
#include <stdio.h>
#include <string.h>
#include <sys/socket.h>
#include <net/if_dl.h>
#include <ifaddrs.h>

char*  getMacAddress(char* macAddress, char* ifName) {
   
    int  success;
    struct ifaddrs * addrs;
    struct ifaddrs * cursor;
    const struct sockaddr_dl * dlAddr;
    const unsigned char* base;
    int i;
   
    success = getifaddrs(&addrs) == 0;
    if (success) {
        cursor = addrs;
        while (cursor != 0) {
            if ( (cursor->ifa_addr->sa_family == AF_LINK)
                && (((const struct sockaddr_dl *) cursor->ifa_addr)->sdl_type == 0x06) && strcmp(ifName,  cursor->ifa_name)==0 ) {
                dlAddr = (const struct sockaddr_dl *) cursor->ifa_addr;
                base = (const unsigned char*) &dlAddr->sdl_data[dlAddr->sdl_nlen];
                strcpy(macAddress, "");
                for (i = 0; i < dlAddr->sdl_alen; i++) {
                    char partialAddr[3];
                    sprintf(partialAddr, "%02x", base[i]);
                    strcat(macAddress, partialAddr);
                   
                }
            }
            cursor = cursor->ifa_next;
        }
       
        freeifaddrs(addrs);
    }
    return macAddress;
}

사용법은 다음과 같다. 내부에서 buf의 메모리를 할당하지 않기 때문에 함수 외부에서 할당을 해서 넘겨줘야 한다.
        // buf에 MAC주소를 넣음
        getMacAddress(buf, "en0");

No comments:

Post a Comment