Chinaunix首页 | 论坛 | 博客
  • 博客访问: 15177743
  • 博文数量: 7460
  • 博客积分: 10434
  • 博客等级: 上将
  • 技术积分: 78178
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-02 22:54
文章分类

全部博文(7460)

文章存档

2011年(1)

2009年(669)

2008年(6790)

分类: C/C++

2008-05-31 09:18:59

由于实际需要,在编程的时候需要得到网卡编号即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
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; 
阅读(342) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~