- 1、本文档共15页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
通信网络设计课程设计 题号:E1 设计日期20080125
PAGE 15
获取MAC地址和IP地址的程序设计
通信0402班 学号:0905040225 姓名:张玉海 指导老师: 王国才
【设计目标】
通过设计程序能获取本计算机的MAC地址和IP地址并显示。
【设计原理和方法】
本程序设计包含两个部分:一、获取本机IP地址;二、获取本机MAC地址。我是通过VB编程实现的。
其中,为了获取本机的IP地址,要使用WinSock库,WinSock API是Microsoft Windows的网络程序接口。应用程序在使用WinSock API之前,必须调用WSAstartup函数,只有调用函数成功返回(表示应用程序与WinSock库成功的简历其连接),应用程序才可以调用其他Windows Socketers .DLL中的函数。当程序将要结束时,又必须调用WSACleanup函数可以结束Windows Socketers .DLL的使用。WinSock规范定义了几个数据库的例程。其中我们要用到gethostname和gethostbyname两个函数来得到IP地址。gethostname可以获得主机名, gethostbyname函数能够从主机名得到对应的“主机”(由名字和地址标识),函数唯一的参数name就是前面调用gethostname函数得到的主机名,二返回值是一个hostent结构,他可以标识一个“主机”列表,hostent的最后一个分量hAddrList中,就可以得到与主机名对应的一个或多个IP地址,hAddrList是一个列表,通过它就可以得到所有的IP地址。
MAC地址也叫物理地址、硬件地址或链路地址,此程序设计的获取MAC地址是通过NetBIOS编程实现的。其中,要用到网络编程接口中的一个重要的概念,那就是LANA编号(LAN适配器编号,LANadaprer),每张物理网卡都会分配一个独一无二的LANA编号。要想调用NetBIOS API函数,需要链接系统的NETAPI.DLL文件NetBIOS API包含的内容其实分全场简单,因为实际上NetBIOS API只是一个函数NetBios ,在Visual Basic中可以这样引入:
Private Declare Function Netbios Lib netapi32.dll (pncb As NET_CONTROL_BLOCK) As Byte
函数中唯一的参数pncb是一个指向某个网络控制块(NET_CONTROL_BLOCK)的指针,在那个NET_CONTROL_BLOCK结构中,包含了为执行一个NetBIOS命令,相应的NetBios函数需要用的的前部信息。NetBIOS提供了几个命令专门负责收集网络参数的命令,其中包括名字查找命令和适配器状态命令,利用适配器状态命令可以获得本地计算机及其LANA编号的有关信息,这就是查知其的MAC地址的一条可行路径。其中在网络适配器状态命令的ADAPTER_STATUS结构中我们最为关心的就是adapter_address字段,它标识的就是网卡的MAC地址。
【设计的功能】
用Visual Basic进行网络编程,通过使用WinSock API和NetBIOS API分别获取IP和MAC地址,并能够显示出来。
【程序框图】
程序流程图分为两部分,获取MAC地址的部分和获取IP地址的部分。
获取MAC地址的主程序流程图如下:
声明数据结构和常量,定义函数,声明netapi32.dll中的Netbios函数Call Netbios(NCB)
声明数据结构和常量,定义函数,声明netapi32.dll中的Netbios函数
Call Netbios(NCB),将LANA编号置0,分配一段内存空间pASTAT
If pASTAT =0
147-147
内存分配失败
结束
Call Netbios(NCB)得到MAC地址并且显示出来
过程结束
退出
165-165
获取IP地址的主程序流程图如下:
声明数据结构和常量,定义函数,声明netapi32.dll中的Netbios函数定义函数变量
声明数据结构和常量,定义函数,声明netapi32.dll中的Netbios函数
定义函数变量
IF
90-90
IP地址为空
结束
通过主机名获取主机IP地址
If IP地址为空
101-101
Windows Sockets API函数调用错误,断开WinSock库
结束
将通过gethostbyname()函数得到的IP地址列表复制到一个临时字符串中
For 循环,i 从 1 到主机列表的长度
分别得到IP地址每一段的值,并用“.”隔开
得到GetIPAddre
文档评论(0)