《获取网卡信息和子网掩码附源程序.docx》由会员分享,可在线阅读,更多相关《获取网卡信息和子网掩码附源程序.docx(4页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 获取网卡信息和子网掩码实验学时:2实验类型:设计实验要求:必修一、实验目的: 1、掌握控制台程序设计的基本方法; 2、了解在该网络环境下如何利用Winsock获取网卡信息及其实现原理; 3、了解在该网络环境下如何利用Winsock获取子网掩码及其实现原理。二、实验内容:利用winsock提供的相关函数进行控制台程序的编制,要求获取计算机网卡信息和子网掩码,并显示在DOS窗口上。 三、实验原理、方法和手段 使用Winsock进行网络通信程序的设计,要通过本次试验初步了解如何利用Winsock进行控制台程序的编制,为以后自己编制类似的程序打下良好的基础。四、实验组织运行要求注意观察结果,记录并分
2、析编译系统的出错信息提示。五、实验条件Pc机VC+ 6.0环境六、实验步骤1. 启动Visual C+6.0开发环境从“开始”菜单中选择“程序| Microsoft Visual Studio 6.0 | Microsoft Visual C+ 6.0”,显示Visual C+6.0开发环境窗口。2. 创建一个项目(1)单击File菜单中的New选项,显示New(新建)对话框。(2)单击Project(项目)标签,在Project选项卡中,选择Win32 Console Application(Win32控制台应用程序向导)。在Location(位置)文本框中指定一个路径,在Project N
3、ame(项目名称)文本框中为项目输入一个名字(例如:lab2),单击OK按钮。(3)依据提示单击下一步按钮,直到最后一步点击完成按钮,完成项目的建立。(4)项目建立好后,点击工程菜单,选择设置,在弹出的新窗口中单击连接(Link)选项卡,在对象/库模块文本框中填入IpHlpAPI.LIB库,点击确定按钮,完成库的添加。3.编写源程序文件参考程序见书p.89 (注意理解实现原理) 4.建立并运行可执行程序(1)选择菜单命令Build | Build lab2.exe,建立可执行程序。如果你正确输入了源程序,此时便成功地生成了可执行程序(例如:lab2.exe)。如果程序有语法错误,则屏幕下方的状
4、态窗口中会显示错误信息,根据这些错误信息对源程序进行修改后,重新选择菜单命令Build | Build lab2.exe,建立可执行程序。(2)选择菜单命令Build | Execute lab2.exe运行程序,观察屏幕的显示内容。5.观察程序运行结果。七、思考题程序运行通过后请回答以下问题:1、 pAdapter指针变量初值设为空有何作用。2、 GetAdaptersInfo函数有哪些返回值,分别代表什么含义。3、 请解释Adapter Addr地址的打印格式控制信息。4、 DhcpEnabled成员可以存放什么类型的值,可能的取值有哪些,分别代表什么含义。5、 While循环末尾的语句p
5、Adapter=pAdapter-Next;有什么作用,while循环什么情况下 会结束。八、实验报告分别记录下以上每个实验内容的结果,并分析结果。 在每次实验后,应整理出实验报告,实验报告应包括以下内容: 题目; 程序清单:每个上机程序的完整源程序代码; 运行结果:每个上机程序运行后打印输出的结果; 对运行情况所作的分析,以及本次调试程序所取得的经验。如果程序未能通过,则分析其原因。 每次的实验报告在下次上机的时候交。九、其它说明(无)源程序:#include /在相应的LIB文件里加入库文件#include /在相应的INCLUDE文件中加入头文件 /在工程连接里,在对象/库模块文本框中填
6、入IpHlpAPI.LIB库#include /#pragma comment (lib,C:Program FilesMicrosoft Platform SDKLibiphlpapi.lib) int main(void) PIP_ADAPTER_INFO pAdapterInfo ; PIP_ADAPTER_INFO pAdapter = NULL ; DWORD dwRetVal = 0 ; pAdapterInfo = (IP_ADAPTER_INFO *) malloc( sizeof(IP_ADAPTER_INFO) ) ; ULONG ulOutBufLen = sizeof(
7、IP_ADAPTER_INFO); if (GetAdaptersInfo( pAdapterInfo, &ulOutBufLen) = ERROR_BUFFER_OVERFLOW) free(pAdapterInfo); pAdapterInfo = (IP_ADAPTER_INFO *) malloc (ulOutBufLen); if (dwRetVal = GetAdaptersInfo( pAdapterInfo, &ulOutBufLen) = NO_ERROR) pAdapter = pAdapterInfo; while (pAdapter) printf(t网卡名: t%sn
8、, pAdapter-AdapterName); printf(t对网卡的描述: t%sn, pAdapter-Description) ; printf(t物理地址: t%ldn, pAdapter-Address) ; printf(tIP地址: t%sn, pAdapter-IpAddressList.IpAddress.String) ; printf(tIP掩码: t%sn, pAdapter-IpAddressList.IpMask.String) ; printf(t 网关地址链表: t%sn, pAdapter-GatewayList.IpAddress.String) ; p
9、rintf(t*n) ; if (pAdapter-DhcpEnabled) printf(tDHCP服务开启: Yesn); printf(ttDHCP服务: t%sn, pAdapter-DhcpServer.IpAddress.String); printf(t租赁信息: %ldn, pAdapter-LeaseObtained); else printf(tDHCP服务开启: Non); if (pAdapter-HaveWins) printf(t启用Wins: Yesn) ; printf(tt主WINS地址: t%sn, pAdapter-PrimaryWinsServer.IpAddress.String) ; printf(tt辅WINS地址: t%sn, pAdapter-SecondaryWinsServer.IpAddress.String) ; else printf(t启用Wins: Non); pAdapter = pAdapter-Next; else printf(GetAdaptersInfo函数调用失败.n); return 0;
限制150内