实验一 基于NETBIOS网卡信息的获取
- 格式:doc
- 大小:26.00 KB
- 文档页数:5
实验一基于NETBIOS网卡信息的获取
(一)实验目的
1.熟悉VC6.0编程环境。
2.掌握基于NETBIOS服务的编程方法。
(二)实验学时:2学时
(三)实验类型:验证
(四)实验内容
1.VC编程环境。
2.利用NCB探测LANA资源及复位的方法。
3.利用NCBASTA命令获适配器信息。
(五)实验过程
1.利用VC创建一基于控制台的应用程序
(1)创建APPWizard(exe)工程。
(2)增加NETAPI32.lib
2.探测LANA资源,获取主机有多少逻辑网卡,即输出lana_enum.length
3.利用NCBASTA命令获取每个逻辑网卡的信息,包括MAC地址,协议类型及每个逻辑网卡上的名字表中名字的个数。
附:部分代码
(1)int LanaEnum(LANA_ENUM*lenum)
{
NCB ncb;
ZeroMenory(&ncb,sizeof(NCB));
ncb.ncb_command=NCBENUM;
ncb.ncb_buffer=(PUCHAR)(lenum);
ncb.ncb_length=sizeof(LANA_ENUM);
if(Netbios(&ncb)!=NRC_GOODRET)
{
printf("Netbios NCBENUM error:%d\n",ncb.ncb_retcode); return ncb.ncb_rctcode;
}
return NRC_GOODRET;
}
Typedef struct _LANA_ENUM
{
UCHAR length;
UCHAR lana[MAX_LANA];
}LANA_ENUM;
(2)int Astatus(ADAPTER_STATUS *astat,int lana,char *name) {
int uRetCode=0;
printf("test one\n");
NCB ncb;
ZeroMemory(&ncb,sizeof(NCB));
memset(&ncb,0,sizeof(ncb));
ncb.ncb_command=NCBRESET;
ncb.ncb_lana_num=lana;
uRetCode=Netbios(&ncb);
printf("The NCBRESET return code is:0x%x\n",uRetCode);
memset(&ncb,0,sizeof(ncb));
ncb.ncb_command=NCBASTAT;
ncb.ncb_buffer=(PUCHAR)astat;
ncb.ncb_length=sizeof(ADAPTER_STATUS);
memset(&ncb.ncb_callname,'0',NCBNAMSZ);
strncpy((char*)&ncb.ncb_callname,name,strlen(name)); ncb.ncb_lana_num=lana;
if(Netbios(&ncb)!=NRC_GOODRET)
{
printf("NCBASTAT ERROR:%d\n",ncb.ncb_retcode);
return ncb.ncb_retcode;
}
return NRC_GOODRET;
}
(3)if(NCR_GOODRET==Astatus((struct
_ADAPTER_STATUS*)&Adapter,na[i],name))
printf("the ethernet number is:%02x_%02x_%02x_%02x_%02x_%02x\n",Adapter.adapt.adapter_ address[0],Adapter.adapt.adapter_address[1],Adapter.adapt.adapter_a ddress[2],Adapter.adapt.adapter_address[3],Adapter.adapt.adapter_ad dress[4],Adapter.adapt.adapter_address[5]);
if(Adapter.adapt.adapter_type==0XFF)
printf("the adapter is token ring adapter.\n");
else if(Adapter.adapt.adapter_type==0XFE)
printf("the adapter is Ethernet adapter.\n");
printf("the software-release level is%d.%d\n",Adapter.adapt.rev_major,Adapter.adapt.rev_minor);
printf("the number of names in the local names table is %d\n",_count);
for(int i=0;i<_count;i++)
printf("%s\n",Buffer[i].name);。