windows c语言下获取pc mac地址

mylove94U 2015-06-10 03:56:39
各位大侠好,我想写个函数获取机器的MAC地址,在论坛上找了些代码,能成功获取,但是我的机器上装了虚拟机,也获取到了虚拟机的MAC地址,而我想要获取到本机的,请问该怎么排除。

csdn获取MAC的代码:
#include <winsock2.h>
#include <Iphlpapi.h>
#include <stdio.h>

void byte2Hex(unsigned char bData,unsigned char hex[])
{
int high=bData/16,low =bData %16;
hex[0] = (high <10)?('0'+high):('A'+high-10);
hex[1] = (low <10)?('0'+low):('A'+low-10);
}

int getLocalMac(unsigned char *mac) //获取本机MAC址
{
ULONG ulSize=0;
PIP_ADAPTER_INFO pInfo=NULL;
int temp=0;
temp = GetAdaptersInfo(pInfo,&ulSize);//第一处调用,获取缓冲区大小
pInfo=(PIP_ADAPTER_INFO)malloc(ulSize);
temp = GetAdaptersInfo(pInfo,&ulSize);

int iCount=0;
while(pInfo)//遍历每一张网卡
{
// pInfo->Address MAC址
for(int i=0;i<(int)pInfo->AddressLength;i++)
{
byte2Hex(pInfo->Address[i],&mac[iCount]);
iCount+=2;
if(i<(int)pInfo->AddressLength-1)
{
mac[iCount++] = ':';
}else
{
mac[iCount++] = '#';
}
}
pInfo = pInfo->Next;
}

if(iCount >0)
{
mac[--iCount]='\0';
return iCount;
}
else return -1;
}

int main(int argc, char* argv[])
{
unsigned char address[1024];
if(getLocalMac(address)>0)
{
printf("mac-%s\n",address);
}else
{
printf("invoke getMAC error!\n");
}
return 0;
}
/*
需要两:iphlpapi.lib ws2_32.lib 静态库(VC添加工程LINK)
*/

打印:mac-8C:89:A5:95:FE:B0#00:50:56:C0:00:01#00:50:56:C0:00:08
用ipconfig /all命令获取
C:\Users\Administrator>ipconfig /all

Windows IP 配置

主机名 . . . . . . . . . . . . . :
主 DNS 后缀 . . . . . . . . . . . :
节点类型 . . . . . . . . . . . . : 混合
IP 路由已启用 . . . . . . . . . . : 否
WINS 代理已启用 . . . . . . . . . : 否

以太网适配器 本地连接:

连接特定的 DNS 后缀 . . . . . . . :
描述. . . . . . . . . . . . . . . : Atheros AR8132 PCI-E Fast Ethernet Contro
ller (NDIS 6.20)
物理地址. . . . . . . . . . . . . : 8C-89-A5-95-FE-B0
DHCP 已启用 . . . . . . . . . . . : 否
自动配置已启用. . . . . . . . . . : 是
本地链接 IPv6 地址. . . . . . . . : fe80::30c4:f73b:53f:4ed0%11(首选)
IPv4 地址 . . . . . . . . . . . . : 172.19.0.90(首选)
子网掩码 . . . . . . . . . . . . : 255.255.0.0
默认网关. . . . . . . . . . . . . : 172.19.0.254
DHCPv6 IAID . . . . . . . . . . . : 244091301
DHCPv6 客户端 DUID . . . . . . . : 00-01-00-01-1A-77-EA-10-8C-89-A5-95-FE-B0

DNS 服务器 . . . . . . . . . . . : 172.19.0.1
172.18.0.3
TCPIP 上的 NetBIOS . . . . . . . : 已启用

以太网适配器 VMware Network Adapter VMnet1:

连接特定的 DNS 后缀 . . . . . . . :
描述. . . . . . . . . . . . . . . : VMware Virtual Ethernet Adapter for VMnet
1
物理地址. . . . . . . . . . . . . : 00-50-56-C0-00-01
..............

请问我该怎样才能排除获取到我本机的MAC地址?
...全文
504 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2015-06-10
  • 打赏
  • 举报
回复
WinExec("cmd /c ipconfig /all >ipconfig.txt",SW_HIDE);
//然后读文件ipconfig.txt的内容。

69,374

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧