获取网卡MAC地址的问题,重新安装系统后,MAC地址会变

lbg 2006-02-11 08:42:37
我在程序里面要使用用户网卡MAC地址认证,但是,如果用户安装了诺顿或其它一些软件的时候,我获取的MAC地址会变,同样情况也出现在用户重装系统后.这样,我必须每次都要在数据库里改用户网卡MAC地址,很麻烦,是不是我获取MAC地址方法有问题?以下是我的代码:
这是获取机器上所有的网卡地址:
void __fastcall TUser::GetMacList(TStrings * macs) const
{
LANA_ENUM AdapterList;
NCB Ncb;
memset(&Ncb, 0, sizeof(NCB));
Ncb.ncb_command = NCBENUM;
Ncb.ncb_buffer = (unsigned char *)&AdapterList;
Ncb.ncb_length = sizeof(AdapterList);
Netbios(&Ncb);
AnsiString mac_addr;
for (int i = 0; i < AdapterList.length; i++)
{ //lenght为当前机器所安装的网卡数量
if (!GetAdapterInfo(AdapterList.lana[i], mac_addr))
{
Application->MessageBox("读取硬件标志错误","错误信息",MB_OK);
break;
}
else
{
macs->Add(mac_addr);
}
}
}



bool __fastcall TUser::GetAdapterInfo(int adapter_num, AnsiString &mac_addr)
{
// Reset the LAN adapter so that we can begin querying it
NCB Ncb;
memset(&Ncb, 0, sizeof(Ncb));
Ncb.ncb_command = NCBRESET;
Ncb.ncb_lana_num = adapter_num;
if (Netbios(&Ncb) != NRC_GOODRET) {
mac_addr = "bad (NCBRESET): ";
mac_addr += AnsiString(Ncb.ncb_retcode);
return false;
}
//Prepare to get the adapter status block
ZeroMemory(&Ncb,sizeof(Ncb));
Ncb.ncb_command = NCBASTAT;
Ncb.ncb_lana_num = adapter_num;
strcpy((char *) Ncb.ncb_callname, "*");
struct ASTAT
{
ADAPTER_STATUS adapt;
NAME_BUFFER NameBuff[30];
} Adapter;
ZeroMemory(&Adapter,sizeof(Adapter));
Ncb.ncb_buffer = (unsigned char *)&Adapter;
Ncb.ncb_length = sizeof(Adapter);
// Get the adapter's info and, if this works, return it in standard,
// colon-delimited form.
if (Netbios(&Ncb) == 0)
{
char acMAC[18];
sprintf(acMAC, "%02X%02X%02X%02X%02X%02X",
int (Adapter.adapt.adapter_address[0]),
int (Adapter.adapt.adapter_address[1]),
int (Adapter.adapt.adapter_address[2]),
int (Adapter.adapt.adapter_address[3]),
int (Adapter.adapt.adapter_address[4]),
int (Adapter.adapt.adapter_address[5]));
mac_addr = acMAC;
return true;
}
else
{
mac_addr = "bad (NCBASTAT): ";
mac_addr +=AnsiString(Ncb.ncb_retcode);
return false;
}
}
...全文
781 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
lbg 2006-02-15
  • 打赏
  • 举报
回复
constantine(飘遥的安吉儿) :
还有硬盘的序列号可用,怎么弄?
constantine 2006-02-14
  • 打赏
  • 举报
回复
如果没有办法就不要用mac了
lbg 2006-02-14
  • 打赏
  • 举报
回复
怎么办?
constantine 2006-02-13
  • 打赏
  • 举报
回复
修改mac地址?
修改过的没有测试过,你的方法如果是没有修改过的是没有问题的
要不你用SendARP 测试 看看,估计也不行,
lbg 2006-02-13
  • 打赏
  • 举报
回复
??
kevinmartin 2006-02-13
  • 打赏
  • 举报
回复
理论上mac地址是不可能变得,否则很多公司的绑定mac地址上网的方式就有问题了。

建议好好看看是不是有其他的方式获取mac地址。
lbg 2006-02-11
  • 打赏
  • 举报
回复
搜索到一贴
http://topic.csdn.net/t/20040702/08/3139296.html
其中有人这样说:

//---------------------------------------------------------------
9楼 cxghj (网事如风) 回复于 2004-07-02 09:39:35 得分 0

我用过很多方法,包括Netbios、GetAdaptersInfo、NetWkstaTransportEnum都无法得到原始的MAC地址,得到的都是修改后的MAC地址。

//-----------------------------------------------------------------

我发现我遇到的就是这样的问题
ribut9225 2006-02-11
  • 打赏
  • 举报
回复
帮顶

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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