iOS2012. 8. 1. 08:21

UDID 대체 방법 -> MAC 어드레스 얻기

올해 3월이었죠. 애플이 개인정보 유출을 막고자 UDID를 쓰는 앱에 대해 단계적으로 심사하겠다고 했습니다.

지금은 IOS 5.0 이상에서는 UDID를 추출하는

NSString *udid = [[UIDevice currentDeviceuniqueIdentifier];


메소드를 쓰면 안된다고 하네요. 


그래서 나온 대안 중, MAC 어드레스 값을 추출하는 방법입니다.


일종의 PC의 랜카드 고유번호(?)라고 하는데 아이폰에서는 네트워크 접속 이더넷카드 시리얼 넘버라고 보시면 되요.


구글에서 떠도는 소스는 3G와 WI-FI 환경에서 값이 다르게 추출된다고 하네요.


형식은 FF:FF:FF:FF:FF:FF 이런식으로 나와요

그 문제를 해결한 소스입니다. 저도 어디서 구한 소스구요 ㅋ

개발자님들 대단하다.


구현 방법입니다.



Macaddress.h


char*  getMacAddress(char* macAddress, char* ifName);


Macaddress.c


#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++) {

                    if (i != 0) {

                        strcat(macAddress, ":");

                    }

                    char partialAddr[3];

                    sprintf(partialAddr, "%02X", base[i]);

                    strcat(macAddress, partialAddr);

                    

                }

            }

            cursor = cursor->ifa_next;

        }

        

        freeifaddrs(addrs);

    }    

    return macAddress;

}



갖다 쓰실 때는 이런식으로 


#import "MacAddress.h"


char* macAddressString= (char*)malloc(18);

    NSString *macAddress= [[NSString allocinitWithCString:getMacAddress(macAddressString,"en0")

                                                   encoding:NSMacOSRomanStringEncoding];

    NSLog(@" %@ ", macAddress);


 

Posted by 다오나무