how to display the MAC address of client? EDITED
I have a client server program using UPD created in MFC. In the server there are two listboxes. The first one displays the ip addresses of the connected clients.
I want the second listbox to display the MAC address when i click the ip address from the listbox.
So how can I display the MAC address of the client by clicking the ip address in the first listbox?
so i used this code to get the MAC address:
Code:
IP_ADAPTER_INFO AdapterInfo[16]; // Allocate information for up to 16 NICs
DWORD dwBufLen = sizeof(AdapterInfo); // Save the memory size of buffer
DWORD dwStatus = GetAdaptersInfo( // Call GetAdapterInfo
AdapterInfo, // [out] buffer to receive data
&dwBufLen); // [in] size of receive data buffer
assert(dwStatus == ERROR_SUCCESS); // Verify return value is valid, no buffer overflow
PIP_ADAPTER_INFO pAdapterInfo = AdapterInfo;// Contains pointer to current adapter info
do {
PrintMACaddress(pAdapterInfo->Address); // Print MAC address
pAdapterInfo = pAdapterInfo->Next; // Progress through linked list
}
while(pAdapterInfo); // Terminate if last adapter
}
the code above just provides the currents computer mac address so it doesn't matter which ip address i click in the listbox because it only displays the same mac address
Re: how to display the MAC address of client?
It may be that you have too small of an array. Try calling the GetAdaptersInfo() with a NULL and a zero to get the needed size.
You may be getting no results so your "MAC" may be garbage. Instead of a do/while, use just a while loop.
Here is a clip of code I use all the time:
Code:
for(pAdapterInfo= AdapterInfo; pAdapterInfo; pAdapterInfo= pAdapterInfo->Next )
{
DWORD dwIP = ntohl(inet_addr(pAdapterInfo->IpAddressList.IpAddress.String));
DWORD dwMask = ntohl(inet_addr(pAdapterInfo->IpAddressList.IpMask.String));
BYTE MAC[6];
CopyMemory(MAC, pAdapterInfo->Address, 6);
// Do something
}
-Erik
P.S. Also take a look at GetIpNetTable() and SendARP().