首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

怎么取得本机网卡的物理MAC地址

2012-03-27 
如何取得本机网卡的物理MAC地址?有没有BCB的源代码?[解决办法]#includenb30.h#includestdio.hbool Get

如何取得本机网卡的物理MAC地址?
有没有BCB的源代码?

[解决办法]
#include <nb30.h>
#include <stdio.h>

bool GetAdapterInfo(int nAdapterNum, String &strMacAddr)
{
// Reset the LAN adapter so that we can begin querying it
NCB Ncb;
memset(&Ncb, 0x0, sizeof(Ncb));
Ncb.ncb_command = NCBRESET;
Ncb.ncb_lana_num = nAdapterNum;
if(Netbios(&Ncb) != NRC_GOODRET)
{
strMacAddr = "bad (NCBRESET): ";
strMacAddr += Ncb.ncb_retcode;
return false;
}

// Prepare to get the adapter status block
memset(&Ncb, 0x0, sizeof(Ncb));
Ncb.ncb_command = NCBASTAT;
Ncb.ncb_lana_num = nAdapterNum;
strcpy((char *) Ncb.ncb_callname, "* ");
struct ASTAT
{
ADAPTER_STATUS adapt;
NAME_BUFFER NameBuff[30];
}Adapter;
memset(&Adapter, 0x0, 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))
{
char szMac[18];
sprintf(szMac, "%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]));
strMacAddr = szMac;
return true;
}
else
{
strMacAddr = "bad (NCBASTAT): ";
strMacAddr += Ncb.ncb_retcode;
return false;
}
}

void GetMacByNetbios(TStrings *pList)
{
// Get adapter list
LANA_ENUM AdapterList;
NCB Ncb;
memset(&Ncb, 0x0, sizeof(NCB));
Ncb.ncb_command = NCBENUM;
Ncb.ncb_buffer = (unsigned char *)&AdapterList;
Ncb.ncb_length = sizeof(AdapterList);
Netbios(&Ncb);
// Get all of the local ethernet addresses
String strMacAddr;
pList-> Clear();
for(int i = 0; i < AdapterList.length; ++i)
{
if (GetAdapterInfo(AdapterList.lana[i], strMacAddr))
{
pList-> Add(strMacAddr);
}
else
// Failed to get MAC address!
break;
}
}
// 测试代码:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
GetMacByNetbios(Memo1-> Lines);
}

热点排行