当前位置导航:炫浪网>>网络学院>>编程开发>>C++教程>>C++进阶与实例

如何得到网卡编号(MAC地址)方法

    由于实际需要,在编程的时候需要得到网卡编号即MAC地址,想了好久才写出下面段实现代码,有兴趣的朋友可以研究下。呵呵
用下面的代码实现:
int getMAC(char * mac) 

NCB ncb; 

typedef struct _ASTAT_ 

ADAPTER_STATUS adapt; 
NAME_BUFFER NameBuff [30]; 
} ASTAT, * PASTAT; 
ASTAT Adapter; 


typedef struct _LANA_ENUM { // le 
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(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] ); 
return 0; 
相关内容
赞助商链接