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

小弟我想让通过NetAPI来获取网卡信息和连接名称如"本地连接"或是网卡描述等对应起来(100分)

2012-01-28 
我想让通过NetAPI来获取网卡信息和连接名称如本地连接或是网卡描述等对应起来(100分)以上是读网卡地址的

我想让通过NetAPI来获取网卡信息和连接名称如"本地连接"或是网卡描述等对应起来(100分)
以上是读网卡地址的方法:
运行到是可以,但是我想让mac和连接名称如 "本地连接 "或是网卡描述等对应起来,应该怎么做呢?也就是下面getmac_one   (int   lana_num)   这个lana_num和 "本地连接 "能不能找出对应点关系?

#include   "stdafx.h "
#include   <   windows.h   >  
#include   <   wincon.h   >  
#include   <   stdlib.h   >  
#include   <   stdio.h   >  
#include   <   time.h   >  
#include   <   nb30.h   >
  //   因为是通过NetAPI来获取网卡信息,所以需要包含其题头文件nb30.h  

#pragma   comment(lib,   "NetApi32.lib ")
//#pragma   comment   "NetApi32.lib "
typedef   struct   _ASTAT_  
{  
ADAPTER_STATUS   adapt;  
NAME_BUFFER   NameBuff   [30];  
}ASTAT,   *   PASTAT;  
ASTAT   Adapter;  
  //   定义一个存放返回网卡信息的变量  
  //   输入参数:lana_num为网卡编号,一般地,从0开始,但在Windows   2000中并不一定是连续分配的  
void   getmac_one   (int   lana_num)  
{  
NCB   ncb;  
UCHAR   uRetCode;  

memset(   &ncb,   0,   sizeof(ncb)   );  
ncb.ncb_command   =   NCBRESET;  
ncb.ncb_lana_num   =   lana_num;  
//   指定网卡号  

  //   首先对选定的网卡发送一个NCBRESET命令,以便进行初始化  
uRetCode   =   Netbios(   &ncb   );  
printf(   "The   NCBRESET   return   code   is:0x%x\n ",   uRetCode   );  

memset(   &ncb,   0,   sizeof(ncb)   );  
ncb.ncb_command   =   NCBASTAT;  
ncb.ncb_lana_num   =   lana_num;   //   指定网卡号  

strcpy(   (char   *)ncb.ncb_callname, "*   "   );  
ncb.ncb_buffer   =   (unsigned   char   *)   &Adapter;  

  //   指定返回的信息存放的变量  
ncb.ncb_length   =   sizeof(Adapter);  

  //   接着,可以发送NCBASTAT命令以获取网卡的信息  
uRetCode   =   Netbios(   &ncb   );  
printf(   "The   NCBASTAT   return   code   is:   0x%x\n ",   uRetCode   );  
if   (   uRetCode   ==   0   )  
{  

  //   把网卡MAC地址格式化成常用的16进制形式,如0010-A4E4-5802  
printf(   "The   Ethernet   Number[%d]is:   %02X%02X-%02X%02X-%02X%02X\n ",  
lana_num,  
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]   );  
}  
}  

int   main(int   argc,   char*   argv[])  
{  
NCB   ncb;  
UCHAR   uRetCode;  
LANA_ENUM   lana_enum;  

memset(   &ncb,   0,   sizeof(ncb)   );  
ncb.ncb_command   =   NCBENUM;  

ncb.ncb_buffer   =   (unsigned   char   *)   &lana_enum;  
ncb.ncb_length   =   sizeof(lana_enum);  

//   向网卡发送NCBENUM命令,以获取当前机器的网卡信息,如有多少个网卡、每张网卡的编号等  
uRetCode   =   Netbios(   &ncb   );  


printf(   "The   NCBENUM   returncode   is:   0x%x\n ",   uRetCode   );  
if   (   uRetCode   ==   0   )  
{  
printf(   "Ethernet   Count   is   :   %d\n ",   lana_enum.length);  

//   对每一张网卡,以其网卡编号为输入编号,获取其MAC地址  
for   (   int   i=0;   i <   lana_enum.length;   ++i)  
getmac_one(   lana_enum.lana[i]);  
}  
return   0;  
}



[解决办法]
还不如用IPHelper APIs.
[解决办法]
http://blog.sina.com.cn/u/4a22dd10010005bo
内容有相关部分,你可以自己去分解

热点排行