如何取得网卡的真实mac地址?

liqiang123abc 2007-06-24 11:56:51
如何取得网卡的真实mac地址?
是真实地址哦
不是从注册表里读取的mac地址
注册表里读取的mac地址
是可以随意修改的
我要的是出厂的时候烧进网卡里的唯一地址
...全文
850 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
七十二寨寨主 2010-01-23
  • 打赏
  • 举报
回复
mark
bbsdkjdx 2010-01-22
  • 打赏
  • 举报
回复
改过MAC的在注册表中有相应数据,让程序先把这段数据备份出来,再把相应注册表项删除,然后用正常手段取得MAC,最后把注册表项恢复。这样可以在不影响其正常使用的情况下得到真实MAC。
sunfred 2007-06-25
  • 打赏
  • 举报
回复
运行——>cmd——>ipconfig/all
liqiang123abc 2007-06-25
  • 打赏
  • 举报
回复
看样子是没戏了
我还是使用硬盘序列号吧
不过还是
多谢各位回贴
liqiang123abc 2007-06-24
  • 打赏
  • 举报
回复
你们的函数只能得到注册表里的网卡地址
那个并不是网卡的真实地址
看样子
读取真实地址需要写驱动程序才行呢
liqiang123abc 2007-06-24
  • 打赏
  • 举报
回复
不好意思
你们贴的代码我都试过了
得到的网卡地址是12df34ef56cb
这个是我修改了注册表以后的地址
以前的地址不是这个
方法是修改注册表的HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}\0001 主键 创建2个新键值
输入新的地址
网卡地址就被改掉了
tigerweichao 2007-06-24
  • 打赏
  • 举报
回复
高级货,不懂
liqiang123abc 2007-06-24
  • 打赏
  • 举报
回复
晕了
我昨天发的贴
等了一天一个回贴都没有
以为没什么希望了
快睡觉了
再上来看看
一下回了5贴啊
我来看看
你们贴的代码好用不
先谢了
mymtom 2007-06-24
  • 打赏
  • 举报
回复
在Windows XP下么?
开始->运行;输入getmac然后回车.
cangwu_lee 2007-06-24
  • 打赏
  • 举报
回复
仅供参考



#include <cstdlib>
#include <iostream>
#include <windows.h>
#include <time.h>
#include "nb30.h"

//DEV-C++ 添加 libnetapi32.a

using namespace std;

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

ASTAT Adapter;

void getMac_2(char * mac){
NCB Ncb;
UCHAR uRetCode;
LANA_ENUM lenum;
int i = 0;

memset(&Ncb, 0, sizeof(Ncb));
Ncb.ncb_command = NCBENUM;
Ncb.ncb_buffer = (UCHAR *)&lenum;
Ncb.ncb_length = sizeof(lenum);

uRetCode = Netbios( &Ncb );
printf("The NCBENUM return adapter number is: %d \n", lenum.length);
for(i=0; i < lenum.length ;i++){
memset(&Ncb, 0, sizeof(Ncb));
Ncb.ncb_command = NCBRESET;
Ncb.ncb_lana_num = lenum.lana[i];
uRetCode = Netbios( &Ncb );

memset(&Ncb, 0, sizeof(Ncb));
Ncb.ncb_command = NCBASTAT;
Ncb.ncb_lana_num = lenum.lana[i];
strcpy((char *)Ncb.ncb_callname, "* ");
Ncb.ncb_buffer = (unsigned char *) &Adapter;
Ncb.ncb_length = sizeof(Adapter);
uRetCode = Netbios( &Ncb );

if (uRetCode == 0){
sprintf(mac, "%02x-%02x-%02x-%02x-%02x-%02x",
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]
);
//printf("The Ethernet Number on LANA %d is: %s\n", lenum.lana[i], mac);
}
}
}

int main(int argc, char *argv[]){
char *mac=new char[32];
getMac_2(mac);
printf("%s\n", mac);
delete[]mac;
system("PAUSE>NUL");
return EXIT_SUCCESS;
}
gjw310 2007-06-24
  • 打赏
  • 举报
回复
void GetMAC(char * mac)
{ NCB ncb;//网络控制块
ADAPTER_STATUS adapt;//存放网卡信息
LANA_ENUM lana_enum;//存放网卡编号
UCHAR uRetCode;
memset(&ncb,0,sizeof(ncb));
memset(&lana_enum,0,sizeof(lana_enum));
ncb.ncb_command=NCBRESET;//对网卡发送NCBRESET命令,进行初始化
ncb.ncb_lana_num=lana_enum.lana[0];
uRetCode=Netbios(&ncb);
if(uRetCode!=NRC_GOODRET) return uRetCode;
memset(&ncb,0,sizeof(ncb));
ncb.ncb_command=NCBASTAT;//对网卡发送NCBSTAT命令,获取网卡信息
ncb.ncb_lana_num=lana_enum.lana[0];
strcpy((char*)ncb.ncb_callname,"*");
ncb.ncb_buffer=(unsigned char *)&adapt;
ncb.ncb_length=sizeof(adapt);
uRetCode=Netbios(&ncb);
if(uRetCode!=NRC_GOODRET) return uRetCode;
sprintf(mac,"%02X%02X%02X%02X%02X%02X",//把网卡地址格式化输出到字符串mac中
adapt.adapter_address[0],
adapt.adapter_address[1],
adapt.adapter_address[2],
adapt.adapter_address[3],
adapt.adapter_address[4],
adapt.adapter_address[5]);
}
xiaogaozxm83 2007-06-24
  • 打赏
  • 举报
回复
专门的读卡机和相应的软件
mymtom 2007-06-24
  • 打赏
  • 举报
回复
注册表里的MAC删除,重启,后再取MAC,不知道这样可以么?

70,037

社区成员

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

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