获取网卡的MAC地址

来源:互联网 发布:车主数据贩卖 编辑:程序博客网 时间:2024/04/28 03:56

 

第一种方法:使用NetBIOS

包含头文件:nb30.h

支持库:Netapi32.lib

该方法只使用一个函数:Netbios(PNCB pncb),但是使用过程有点复杂,第二种方法比较简单

 

需要用到3个结构:NCB,LANA_ENUM,ADAPTER_STATUS

(只写上核心部分,其实如果只想要物理网卡的MAC地址,直接调用第3步就行了,这里可以列出多个MAC地址,除物理的外都是虚拟的)

1、用NCBENUM命令枚举系统中网卡的数量

NCB ncb;

LANA_ENUM lana_enum;

ADAPTER_STATUS adapter;

 

memset(&ncb,0,sizeof(ncb));

ncb.ncb_command = NCBENUM;

ncb.ncb_buffer = (unsigned char*)&lana_enum;

ncb.ncb_length = sizeof(lana_enum);

Netbios(&ncb);   成功则返回0,网卡数量在lana_enum.length

 

2、用NCBRESET重置网卡,网卡接受新的NCB命令时必须重置

memset(&ncb,0,sizeof(ncb));

ncb.ncb_command = NCBRESET;

ncb.ncb_lana_num = lana_enum.lana;  lana_enum是第一步获取

Netbios(&ncb);

 

3、用NCBASTAT接受本地或远程接口卡的状态

memset(&ncb,0,sizeof(ncb));

ncb.ncb_command = NCBASTAT;

ncb.ncb_lana_num = lana_enum.lana;  同样为第一步获取的

strcpy((char*)ncb.ncb_callname,"*  ");  该参数书上说是被呼叫应用的名字,还没搞懂啥意思

ncb.ncb_buffer = (unsigned char*)&adapter;

ncb.ncb_length = sizeof(adapter);

Netbios(&ncb);

 

MAC网卡地址:adapter.adapter_address

 

第二种方法:使用GetAdapterInfo

查询SDK有范例