C/C++通过IP获取局域网网卡MAC地址
通过win32 SendARP获取MAC地址
代码
#include <winsock2.h>
#include <iostream>
#include<iphlpapi.h>
#pragma comment(lib,"ws2_32.lib")
#pragma comment(lib,"iphlpapi.lib")
/**
* 通过局域网ip获取网卡MAC地址
*/
std::string GetMacAddress(std::string destIpStr)
{
IPAddr srcIp = 0;
IPAddr destIp = 0;
ULONG mac[2];
ULONG macLen = 6;
destIp = inet_addr(destIpStr.c_str());
memset(mac,0xff,sizeof(mac));
SendARP(destIp,srcIp,(PVOID)mac,(PULONG)&macLen);
printf("%p\r\n",mac);
// 打印mac
byte* bMac = (byte*)mac;
std::string macResult;
for (size_t i = 0; i < macLen; i++)
{
char macItem[2];
/* code */
sprintf(macItem,"%.2X",bMac[i]);
macResult.append(macItem);
if(i<macLen-1)
{
macResult.append("-");
}
}
return macResult;
};
调用
void main(int* argc,char* argv[])
{
// std::cout << 1111 <<std::endl;
std::string ip;
ip.append("192.168.31.191");
std::string mac = GetMacAddress(ip);
std::cout <<"ip\tmac"<< std::endl;
std::cout << ip.c_str() << "\t" <<mac.c_str() << std::endl;
getchar();
};
输出
ip mac
192.168.31.191 08-D1-27-8F-25-EV