获取主机网卡信息——实验报告.doc_第1页
获取主机网卡信息——实验报告.doc_第2页
获取主机网卡信息——实验报告.doc_第3页
获取主机网卡信息——实验报告.doc_第4页
获取主机网卡信息——实验报告.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

姓名 学号 班级 年级 指导教师 西安财经学院信息学院 网络程序设计 实验报告实验名称 获取主机网卡信息和子网掩码 实验室 实验楼402 实验日期 一、实验目的 了解如何编写程序实现获取本地主机的网卡信息和子网掩码。2、 实验要求 获得本地计算机的网络信息,从而获得计算机的网卡名、网卡驱动程序、IP地址、子网掩码、物理地址、是否启用了DHCP、是否启用了WINS等网络信息。3、 实验内容 利用GetAdaptersInfo函数获取计算机的网络信息。4、 实验原理 在TCP/IP协议中,子网掩码是用来区分网络上的主机是否在同一网络段内的。假如某主机的IP地址为202.119.115.78,它的子网掩码为255.255.255.0,将这两个数据做AND运算,则所得的值中非零的部分即为网络ID。运算步骤如下:(1)IP地址202.119.115.78的二进制值为11001010.01110111.01110011.01001110。(2) 子网掩码255.255.255.0的二进制值为11111111.11111111.11111111.00000000。 (3) 将两者做AND计算,其结果为11001010.01110111.01110011.00000000。(4) 将结果转换成十进制后为202.119.115.0,其非零部分202.119.115就是网络ID,在IP地址中剩下的为主机ID,本例中为78。这样如果另一台主机的IP地址为202.119.115.83,其子网掩码为255.255.255.0,则其网络ID为202.119.115,主机ID为83。因为这两台主机的网络ID均为202.119.115,因此这两台主机在同一网段内。 函数GetAdaptersInfo可以获得本地计算机的网络信息,从而获得该计算机的网卡名、网卡驱动程序、IP地址、子网掩码、物理地址、是否启用了DHCP、是否启用了WINS等网络信息。注意该函数在头文件IpHlpApi.h中声明,库文件为IpHlpApi.lib。函数原型为:DWORD GetAdaptersInfo(PIP_ADAPTER_INFO pAdapterInfo, PULONG pOutBufLen);其中:参数pAdapterInfo指向IP_ADAPTER_INFO结构链表缓冲区的指针;参数pOutBufLen指向一个ULONG变量的指针,该ULONG变量表示指向pAdapterInfo结构的大小。 参数中的IP_ADAPTER_INFO结构包含了本地计算机上一个特定网络适配卡的信息,该结构格式如下: typedef struct _IP_ADAPTER_INFOstruct _IP_ADAPTER_INFO* Next;/指向链表中下一个适配器信息的指针 DWORD ComboIndex;/预留值 char AdapterNameMAX_ADAPTER_NAME_LENGTH + 4;/使用ANSI字符串表示的适配器名称 char DescriptionMAX_ADAPTER_DESCRIPTION_LENGTH + 4;/使用ANSI字符串表示的适配器描述 UINT AddressLength;/适配器硬件地址以字节计算的长度 BYTE AddressMAX_ADAPTER_ADDRESS_LENGTH;/硬件地址以BYTE数组所表示 DWORD Index;/适配器索引 UINT Type;/适配器类型 UINT DhcpEnabled;/指定这个适配器是否开启DHCP PIP_ADDR_STRING CurrentIpAddress;/预留值 IP_ADDR_STRING IpAddressList;/该适配器的IPv4地址链表 IP_ADDR_STRING GatewayList;/该适配器的网关IPv4地址链表 IP_ADDR_STRING DhcpServer;/该适配器的DHCP服务器的IPv4 地址链表 BOOL HaveWins; IP_ADDR_STRING PrimaryWinsServer; IP_ADDR_STRING SecondaryWinsServer; time_t LeaseObtained;time_t LeaseExpires; IP_ADAPTER_INFO, *PIP_ADAPTER_INFO; 其中成员变量的具体含义如下:Next:链表指针域,通过这个变量来遍历静态链表。ComboIndex:保留未用。AdapterNameMAX_ADAPTER_NAME_LENGTH+4:网卡名。DescriptionMAX_ADAPTER_DESCRIPTION_LENGTH+4:对网卡的描述,实际上是驱动程序的名字。AddressLength:物理地址的长度,通过该变量才能正确地显示下面数组中的物理地址。AddressMAX_ADAPTER_ADDRESS_LENGTH:物理地址,每个字节存放一个十六进制的数值。Index:网卡索引号。 Type:网卡类型。DhcpEnable是否启用了DHCP动态IP分配。CurrentIpAddress:当前使用的IP地址。IpAddressList:绑定到此网卡的IP地址链表。GetwayList:网关地址链表。DhcpServer:DHCP服务器地址,只有在“DhcpEnable=TRUE”时才有效。HaveWins:是否启用了WINS。PrimaryWinsServer:主WINS地址。SecondaryWinsServer:辅WINS地址。 LeaseObtained:当前DHCP租借获取的时间。LeaseExpires:当前DHCP租借失效的时间。 LeaseObtained和LeaseExpires这两个数据结构只有在启动了DHCP时才有效。该结构成员变量PrimaryWinsServer和SecondaryWinsServer的类型IP_ADDR_STRING结构代表IP地址链表的一个节点,其定义如下:该结构表示IP地址链表,即一组IP地址。typedef struct _IP_ADDR_STRINGstruct _IP_ADDR_STRING* Next;IP_ADDRESS_STRING IpAddress;IP_MASK_STRING IpMask;DWORD Context;IP_ADDR_STRING;字段说明:Next: 指向表中的下一个IP_ADDR_STRING结构IpAddress: 一个字符串,它描述了点分十进制IP地址IpMask: 与上面的IpAddress关联的IP地址掩码Context: 网络表入口。5、 实验步骤 利用Visual C+创建工程时,选择Win32 Console Application,程序运行之后是个DOS模式界面。为了利用GetAdaptersInfo函数获取计算机的网络信息,必须在创建的工程中添加入头文件IpHlpApi.h、IpExport.h、IpTypes.h、Iprtrmib.h和库文件IpHlpApi.lib。具体的实现代码如下:#include#includeIphlpapi.h#include#pragma comment(lib,Iphlpapi.lib)int main()PIP_ADAPTER_INFO pAdapterInfo; /pAdapterInfo指向结构体_IP_ADAPTER_INFO的指针PIP_ADAPTER_INFO pAdapter = NULL; /pAdapter指向结构体_IP_ADAPTER_INFO的指针为空DWORD dwRetVal = 0;ULONG ulOutBufLen;pAdapterInfo=(PIP_ADAPTER_INFO)malloc(sizeof(IP_ADAPTER_INFO);/pAdapterInfo指向IP_ADAPTER_INFO结构链表缓冲区的指针;Malloc 向系统申请分配指定size个字节的内存空间。返回类型是 void* 类型。void* 表示未确定类型的指针ulOutBufLen = sizeof(IP_ADAPTER_INFO);/结构体大小/ 第一次调用GetAdapterInfo获取ulOutBufLen大小if (GetAdaptersInfo( pAdapterInfo, &ulOutBufLen) = ERROR_BUFFER_OVERFLOW)/There is not enough space on the disk.free(pAdapterInfo);/释放内存空间pAdapterInfo = (IP_ADAPTER_INFO *) malloc (ulOutBufLen); /pAdapterInfo指向IP_ADAPTER_INFO结构链表缓冲区的指针;if (dwRetVal = GetAdaptersInfo( pAdapterInfo, &ulOutBufLen) = NO_ERROR) pAdapter = pAdapterInfo;HKEY hKEY;/要 查询的键的 句柄while (pAdapter) printf(Adapter Name: t%sn, pAdapter-AdapterName);/char pathMAX_PATH=0;sprintf(path,SYSTEMControlSet001ControlNetwork4D36E972-E325-11CE-BFC1-08002BE10318%sConnection,pAdapter-AdapterName);/打开一个指定的注册表键long ret=:RegOpenKeyEx(HKEY_LOCAL_MACHINE,path, 0, KEY_READ,&hKEY); /指向一个被打开键返回的句柄的指针if(ret!=ERROR_SUCCESS) /如果无法打开hKEY,则终止程序的执行printf(Error !n);return 0;/找回所打开注册表键所关联的一个给定值的类型和数据。unsigned char tmp256=0;DWORD type=REG_SZ;DWORD size=80;ret=:RegQueryValueEx(hKEY,Name, NULL,&type,tmp,&size);if(ret!=ERROR_SUCCESS)printf(Error !n);return 0;:RegCloseKey(hKEY);/释放指定注册键的句柄函数printf(Adapter Chinese Name:t%sn,tmp);/printf(Adapter Desc: t%sn, pAdapter-Description);printf(MAC Addr: t%02x-%02x-%02x-%02x-%02x-%02xn, /%02x,不足两位前面补零pAdapter-Address,pAdapter-Address,pAdapter-Address,pAdapter-Address,pAdapter-Address,pAdapter-Address);printf(IP Address: t%sn, pAdapter-IpAddressList.IpAddres

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论