새소식

Programming/Visual Studio

MAC 주소 얻기

  • -

아카마님(0x616b616d61) 글을 기반으로 LAA 주소값까지 무시하도록 작성했습니다.

gateway 주소가 0.x.x.x 인 경우와 MAC 주소가 xY:xx:xx:xx:xx:xx 일 때 y 값이 2,6,0xA,0xE 가 오는 경우 무시합니다.[각주:1]

ps : 실제 사용하는 nic가 2개 이상인 경우가 고려되지 않았습니다. 검색하다가 예외 사항에 해당되지 않는 맨 첫번째 MAC 주소를 반환하기 때문입니다.

CString GetMACAddress()
{
    CString strGateWay("");                  // gateway 주소 변수
    CString strMACAddress("");               // MAC 주소 변수
    IP_ADAPTER_INFO ipAdapterInfo[5];        // NIC 장치 정보
    DWORD dwBuflen = sizeof(ipAdapterInfo);  // 정보 전체 크기

    DWORD dwStatus = GetAdaptersInfo(ipAdapterInfo, &dwBuflen);  // 정보 얻어오기
    if (dwStatus != ERROR_SUCCESS)	// 얻어오기 실패 예외처리
    {
        CString strDebug;
        strDebug.Format("Error: GetAdaptersInfo() = %d", dwStatus);
        AfxMessageBox(strDebug);
        return _T("");
    }
    PIP_ADAPTER_INFO pIpAdapterInfo = ipAdapterInfo;  // Next 값으로 전체 목록 순회하기 위해 포인터 사용
    do {
        strGateWay = (CString)pIpAdapterInfo->GatewayList.IpAddress.String;    // gateway 주소값 얻어오기

        // gateway 주소가 0.x.x.x 이면 건너뛴다
        if (strGateWay[0] == '0')
        {
            pIpAdapterInfo = pIpAdapterInfo->Next;
            continue;
        }
        
        switch (pIpAdapterInfo->Address[0] % 16) {
        case 2:
        case 6:
        case 0xa:
        case 0xe:
            pIpAdapterInfo = pIpAdapterInfo->Next;
            continue;  // MAC 주소가 x2-xx-xx-xx-xx-xx 일 때, 2의 자리에 2, 6, A, E가 오면 private MAC 주소임.
            break;
        default:
            strMACAddress.Format("%.2X:%.2X:%.2X:%.2X:%.2X:%.2X",
                pIpAdapterInfo->Address[0],
                pIpAdapterInfo->Address[1],
                pIpAdapterInfo->Address[2],
                pIpAdapterInfo->Address[3],
                pIpAdapterInfo->Address[4],
                pIpAdapterInfo->Address[5]
            );
            pIpAdapterInfo = pIpAdapterInfo->Next;
            break;
        }
    } while (pIpAdapterInfo);

    return strMACAddress;
}
  1. 참고글1, https://honeywellaidc.force.com/supportppr/s/article/Locally-Administered-MAC-addresses" href="http:// https://honeywellaidc.force.com/supportppr/s/article/Locally-Administered-MAC-addresses" target="_blank">참고글2  [본문으로]
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.