獲取網卡地址

如何獲取網卡地址(MAC地址):

VC++編寫的代碼,適用於windows環境,API實現

/*char *pMACAdr,返回網卡地址的buff,

 int *nBuffLen前一個參數的長度,

 int nAdapterID = 0網卡號,針對多網卡問題,有的機器不止一個網卡,默認爲0

*/

 

#include <NB30.H>
#pragma comment(lib, "C:\\Program Files\\Microsoft Visual Studio\\VC98\\Lib\\Netapi32.lib")//自己找安裝目錄

BOOL GetMACAdress(char *pMACAdr, int *nBuffLen, int nAdapterID = 0)
{
 if (NULL == pMACAdr || *nBuffLen <= 0 || nAdapterID < 0) {
  *nBuffLen = 0;
  return FALSE;
 }
 memset(pMACAdr, 0, *nBuffLen);

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

 NCB  ncb;  
 UCHAR   uRetCode;  
 ASTAT   Adapter;
 
 memset(&ncb, 0, sizeof(ncb));  
 ncb.ncb_command  = NCBRESET;  
 //網卡序號,一般從0開始
 ncb.ncb_lana_num = nAdapterID; 
 
 //send one NCBRESET command to the adapter car, for initialzing
 uRetCode = Netbios(&ncb);     
 memset(&ncb, 0, sizeof(ncb));  
 ncb.ncb_command  = NCBASTAT;  
 ncb.ncb_lana_num = nAdapterID;//specify the adapter car ID 
   
 strcpy((char*)ncb.ncb_callname, "* ");  
 ncb.ncb_buffer = (PUCHAR)&Adapter;      
 ncb.ncb_length = sizeof(Adapter);  
   
 //send the NCBRESET command to get the adapter car msg 
 uRetCode = Netbios(&ncb);
 CString szMacAdr; 
 if(0 == uRetCode) {   //獲得網卡信息成功
  szMacAdr.Format("%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]  
   );
 }
 if (szMacAdr.IsEmpty())  {
  *nBuffLen = 0;
  return FALSE;
 }
 else{
  int nMacLen = szMacAdr.GetLength();
  *nBuffLen = nMacLen <= *nBuffLen ? nMacLen : *nBuffLen;
  memcpy(pMACAdr, szMacAdr.GetBuffer(*nBuffLen), *nBuffLen);
  return TRUE;
 }
}

 

如果想現存的DLL或者ActiveX控制, 在我的資源裏有封裝好的DLL與ActiveX控制下載, 直接調用接口使用即可

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章