컴퓨터 공학/C++

[C/C++] 윈도우즈 운영체제에서 맥 주소 가져오기

혼새미로 2018. 9. 18. 15:33
반응형

아래의 코드는 윈도우즈 환경에서 "Windows.h" 헤더파일에 포함된 API를 사용하여 장치의 맥 주소를 출력하는 과정을 나타냅니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <stdio.h>
#include <Windows.h>
#include <assert.h>
#include <IPHlpApi.h>
 
#pragma comment(lib, "iphlpapi.lib")
 
IP_ADAPTER_INFO* GetNetworkAdaptersInfo()
{
    DWORD dwBufLen = 0;
    DWORD dwStatus = GetAdaptersInfo(NULL&dwBufLen);
    assert(dwStatus == ERROR_BUFFER_OVERFLOW);
    IP_ADAPTER_INFO* pAdapterInfo = (IP_ADAPTER_INFO*)malloc(dwBufLen);
    dwStatus = GetAdaptersInfo(pAdapterInfo, &dwBufLen);
    assert(dwStatus == ERROR_SUCCESS);
    if (dwStatus == ERROR_SUCCESS)
        return pAdapterInfo;
    else
    {
        free(pAdapterInfo);
        return NULL;
    }
}
 
void DisplayAllMacAddress(IP_ADAPTER_INFO* pAdapterInfo)
{
    const int MAC_ADDRESS_LENGTH = 6;
    
    while (pAdapterInfo != NULL)
    {
        if (pAdapterInfo->Type == MIB_IF_TYPE_ETHERNET)
        {
            printf("어댑터 이름:%s\n", pAdapterInfo->AdapterName);
            printf("맥 주소: ");
            for (int i = 0; i < MAC_ADDRESS_LENGTH; i++)
            {
                printf("%x ", pAdapterInfo->Address[i]);
            }
            printf("\n");
        }
        pAdapterInfo = pAdapterInfo->Next;
    }
}
 
void main()
{
    IP_ADAPTER_INFO* pAdaptersInfoList = GetNetworkAdaptersInfo();
    DisplayAllMacAddress(pAdaptersInfoList);
    free(pAdaptersInfoList);
}
cs


반응형