Windows7 下怎么获得网卡MAC地址

barbarian110 2011-10-13 10:39:20
如题,通用的方法用API和WMI在XP下可以正常获得,但是在Windows7下都集体罢工,取不到数据,这是为神马呢, 求解答,求附体,求交往。。
...全文
93 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
大道曙光 2011-10-13
  • 打赏
  • 举报
回复
学习了 [Quote=引用 1 楼 chiyer 的回复:]

C/C++ code

#include "stdafx.h"
#include <windows.h>
#include <wincon.h>
#include <nb30.h>
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#pragma comment(lib, "Netapi32.lib")……
[/Quote]
柯本 2011-10-13
  • 打赏
  • 举报
回复
用WMI肯定可以,只是WMI的速度会比较慢
星羽 2011-10-13
  • 打赏
  • 举报
回复

#include "stdafx.h"
#include <windows.h>
#include <wincon.h>
#include <nb30.h>
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#pragma comment(lib, "Netapi32.lib")


typedef struct _ASTAT_
{
ADAPTER_STATUS adapt;
NAME_BUFFER NameBuff [30];
}ASTAT, * PASTAT;

ASTAT Adapter;

// 定义一个存放返回网卡信息的变量
// 输入参数:lana_num为网卡编号,一般地,从0开始,但在Windows 2000中并不一定是连续分配的

void getmac_one (int lana_num)
{
NCB ncb;
UCHAR uRetCode;

memset( &ncb, 0, sizeof(ncb) );
ncb.ncb_command = NCBRESET;
ncb.ncb_lana_num = lana_num;
// 指定网卡号

// 首先对选定的网卡发送一个NCBRESET命令,以便进行初始化
uRetCode = Netbios( &ncb );
printf( "The NCBRESET return code is:0x%x \n", uRetCode );

memset( &ncb, 0, sizeof(ncb) );
ncb.ncb_command = NCBASTAT;
ncb.ncb_lana_num = lana_num; // 指定网卡号

strcpy( (char *)ncb.ncb_callname,"* " );
ncb.ncb_buffer = (unsigned char *) &Adapter;

// 指定返回的信息存放的变量
ncb.ncb_length = sizeof(Adapter);

// 接着,可以发送NCBASTAT命令以获取网卡的信息
uRetCode = Netbios( &ncb );
printf( "The NCBASTAT eturn code is: 0x%x \n", uRetCode );
if ( uRetCode == 0 )
{

// 把网卡MAC地址格式化成常用的16进制形式,如0010-A4E4-5802
printf( "The Ethernet Number[%d] is: %02X-%02X-%02X-%02X-%02X-%02X\n",
lana_num,
Adapter.adapt.adapter_address[0],
Adapter.adapt.adapter_address[1],
Adapter.adapt.adapter_address[2],
Adapter.adapt.adapter_address[3],
Adapter.adapt.adapter_address[4],
Adapter.adapt.adapter_address[5] );
}
}

int main(int argc, char* argv[])
{
NCB ncb;
UCHAR uRetCode;
LANA_ENUM lana_enum;

memset( &ncb, 0, sizeof(ncb) );
ncb.ncb_command = NCBENUM;

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

// 向网卡发送NCBENUM命令,以获取当前机器的网卡信息,如有多少个网卡、每张网卡的编号等
uRetCode = Netbios( &ncb );
printf( "The NCBENUM return code is:0x%x \n", uRetCode );
if ( uRetCode == 0 )
{
printf( "Ethernet Count is : %d\n\n", lana_enum.length);

for (int i = 0; i < lana_enum.length; ++i)
getmac_one( lana_enum.lana[i]);
}


return 0;
}

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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