获取MAC地址MAD地址是网卡的地址吧? 在CMD里运行 ipconfig /all,应该是 NIC 部分的物理地址吧。我下面运行
获取MAC地址
MAD地址是网卡的地址吧? 在CMD里运行 ipconfig /all,应该是 NIC 部分的物理地址吧。
我下面运行怎么全是0呢
C/C++ code WSADATA wsaData; WORD sockVersion = MAKEWORD(2, 2); ::WSAStartup( sockVersion, &wsaData); PIP_ADAPTER_INFO padapterInfo = 0; ULONG ulong; GetAdaptersInfo(padapterInfo, &ulong); padapterInfo = (PIP_ADAPTER_INFO) malloc(ulong); int a = GetAdaptersInfo(padapterInfo, &ulong); u_char g_ucLocalMac[6]; memcpy(g_ucLocalMac, padapterInfo->Address, 6); printf("%02X - %02X - %02X - %02X - %02X - %02X ", g_ucLocalMac[0], g_ucLocalMac[1], g_ucLocalMac[2], g_ucLocalMac[3], g_ucLocalMac[4], g_ucLocalMac[5] );
[解决办法]// 获取本地 MAC 地址
extern "C" __declspec(dllexport) int _stdcall Get_Mac_Addr( char * szMac)
{
NCB ncb;
typedef struct _ASTAT_
{
ADAPTER_STATUS adapt;
NAME_BUFFER NameBuff[30];
}ASTAT,*PASTAT;
ASTAT Adapter;
typedef struct _LANA_ENUM
{
UCHAR length;
UCHAR lana[MAX_LANA];
}LANA_ENUM;
LANA_ENUM lana_enum;
UCHAR uRetCode;
memset(&ncb, 0, sizeof(ncb));
memset(&lana_enum, 0, sizeof(lana_enum));
ncb.ncb_command = NCBENUM;
ncb.ncb_buffer = (unsigned char *)&lana_enum;
ncb.ncb_length = sizeof(LANA_ENUM);
uRetCode = Netbios(&ncb);
if(uRetCode != NRC_GOODRET) return uRetCode;
for(int lana=0; lana<lana_enum.length; lana++)
{
ncb.ncb_command = NCBRESET;
ncb.ncb_lana_num = lana_enum.lana[lana];
uRetCode = Netbios(&ncb);
if(uRetCode == NRC_GOODRET)
break;
}
if(uRetCode != NRC_GOODRET)return uRetCode;
memset(&ncb, 0, sizeof(ncb));
ncb.ncb_command = NCBASTAT;
ncb.ncb_lana_num = lana_enum.lana[0];
strcpy((char*)ncb.ncb_callname, "*");
ncb.ncb_buffer = (unsigned char *)&Adapter;
ncb.ncb_length = sizeof(Adapter);
uRetCode = Netbios(&ncb);
if(uRetCode != NRC_GOODRET) return uRetCode;
sprintf( szMac,"%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]);
return sizeof(szMac);
}