Gold mine of Visual C++ tricks!
How to get the MAC address of your network adapter.
![]()
MAC address stands for “Media Access Control“ address which is 6 bytes( 48 bits ) long. MAC address is the unique address which is used to identify network interface hardware. So how to get the MAC address of your network adapter?
![]()
You can use the function – GetAdaptersInfo(). The network adapter information will be populated and filled back in IP_ADAPTER_INFO structure. In that structure, you can get the network adapter name, MAC address and a couple of other information. See the sample code snippet.
#include "Iphlpapi.h"
...
// Get the buffer length required for IP_ADAPTER_INFO.
ULONG BufferLength = 0;
BYTE* pBuffer = 0;
if( ERROR_BUFFER_OVERFLOW == GetAdaptersInfo( 0, &BufferLength ))
{
// Now the BufferLength contain the required buffer length.
// Allocate necessary buffer.
pBuffer = new BYTE[ BufferLength ];
}
else
{
// Error occurred. handle it accordingly.
}
// Get the Adapter Information.
PIP_ADAPTER_INFO pAdapterInfo =
reinterpret_cast<PIP_ADAPTER_INFO>(pBuffer);
GetAdaptersInfo( pAdapterInfo, &BufferLength );
// Iterate the network adapters and print their MAC address.
while( pAdapterInfo )
{
// Assuming pAdapterInfo->AddressLength is 6.
CString csMacAddress;
csMacAddress.Format(_T("%02x:%02x:%02x:%02x:%02x:%02x"),
pAdapterInfo->Address[0],
pAdapterInfo->Address[1],
pAdapterInfo->Address[2],
pAdapterInfo->Address[3],
pAdapterInfo->Address[4],
pAdapterInfo->Address[5]);
cout << "Adapter Name :" << pAdapterInfo->AdapterName << " "
<< "MAC :" << (LPCTSTR) csMacAddress << endl;
// Get next adapter info.
pAdapterInfo = pAdapterInfo->Next;
}
// deallocate the buffer.
delete[] pBuffer;
![]()
Don’t forget to add Iphlpapi.lib to project settings.
![]()
Targeted Audience – Beginners.
| Print article | This entry was posted by Jijo Raj on May 24, 2008 at 6:56 pm, and is filed under Codeproject, Networking & Winsock. Follow any responses to this post through RSS 2.0. You can leave a response or trackback from your own site. |
about 1 year ago
Hello,
From where can I get Iphlpapi.h and Iphlpapi.lib? I am using VC++ 6.0.
Regards
Ananth
about 1 year ago
Ananth, you need to download the Microsoft SDKs which is not included in the Visual C++ 6, that contains new libraries, headers for VC++ 6.
about 1 year ago
Hello,
Sometimes, this mac address is returning morethan one mac id. Then how should i find in them which is the active macid
Regards
Prasanna
about 1 year ago
Hello Prasanna,
Check this link for getting the active IP address(es) of your machine – http://bobmoore.mvps.org/Win32/w32tip19.htm.
And IP_ADAPTER_INFO.CurrentIpAddress contains the active IP of the adapter. So loop through all adapter info and get the active adapter and there by you can get the mac address of active adapter.
Well, keep in mind that, a PC can have multiple adapter and multiple IP addresses configured at same time. That does mean that there can be multiple active MAC addresses. Hope it helps you.
Regards,
Jijo.
about 11 months ago
In the 15 years of C++ development, I’ve never seen the NIC Name show up under AdapterName property. It’s always shown up under Description.
about 11 months ago
BTW, your params for calling GetAdapterInfo() is backwards. Maybe you should test your code before posting?
DWORD GetAdaptersInfo(
__out PIP_ADAPTER_INFO pAdapterInfo,
__inout PULONG pOutBufLen
);