아카마님(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, 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 [본문으로]
'IT > Visual Studio' 카테고리의 다른 글
[ vscode] install terminal quit with output 오류 (0) | 2020.11.12 |
---|---|
[visual studio] COM 구성 요소 호출에서 HRESULT E_FAIL 오류가 반환되었습니다 오류 (0) | 2019.09.04 |
[VS2017] LNK1104: mfc90.lib 파일을 열 수 없습니다 (2) | 2019.06.21 |
CFile 처리하기 (0) | 2018.11.28 |
[VS2008] 코드 정의창 배경 바꾸기 (0) | 2016.10.20 |