1、实验室计算机的IP地址自动设置程序服务器端的设计与实现论文实验室计算机IP地址自动设置程序-服务器端的设计与实现摘 要IP地址的分配和管理是实验室管理员比较重视的一个问题,而大部分管理员都采用的是DHCP技术来实现,虽然DHCP技术可以为用户接入网络提供方便,但还存在一些弊端,例如:IP地址具有随机性,用户的IP地址是随机分配的,具有不确定性等等。本系统的主要功能就是实现对实验室计算机IP地址的静态分配,从而解决DHCP技术的一些缺陷。主要实现方法为:对有请求的客户端的网卡地址和分配给其的IP地址进行记录,通过网卡地址来标识某一具体主机,当其再有请求到达时,分配给其已经记录的IP地址,以实现分
2、配给客户端固定IP地址的功能。若要手工实现对客户端IP地址的静态分配,可直接在数据库中根据网卡地址修改对应的IP地址即可。IP地址的设置由客户端实现。程序的开发工具为VC+6.0,连接数据库方式为ADO方式,为了优化系统性能和使客户端的请求不阻塞,采用了多线程技术。关键词:ADO;多线程;网络广播;网络编程the Automatic IP Address Configuration Software for Lab the Design and Implementation of the Server-side programAbstractMore and more laboratory m
3、anagers care about the IP address allocation and management problem. Most administrators are using DHCP to resolve it. Although DHCP technology can provide users convenient access to network, but there are some drawbacks, such as the random IP address. This causes the users IP address is distributed
4、 randomly, with uncertainty. The main function of the system is to achieve the static IP address allocation of the laboratory computers. It remedies the DHCP technologys drawbacks. The system uses some network technology. It records the MAC address and the allocated IP address of the client who send
5、 the request packet to server by LAN. Through identifying a host by the specific MAC address, when the same request arrived, the same IP addresses shall be allocated again, which achieves the function that the client shall be allocated to the fixed IP addresses. If users need to manually allocate th
6、e IP address, they can modify the IP addresses that correspond to MAC address. IP addresses are set by the client system. Program development tools is Visual C + + 6.0, access the database with ADO, to optimize system performance. To avoid the block of client requests, multithread technology is used
7、.Key words: ADO; multithread; Network Broadcast; Network Programming 目 录论文总页数:20页1 引言 11.1 课题背景 11.2 主要采用技术 11.2.1 ADO 11.2.2 多线程 11.2.1 网络广播 21.3 系统开发环境 21.3.1 系统软件环境 21.3.2 工具简介 22 系统概述 33 系统模块设计与实现 43.1 总体设计 43.1.1 系统结构设计 43.1.2 通信协议 63.1.3 数据库设计 63.2 编码实现 63.2.1配置模块 63.2.2接收请求模块 93.2.3处理请求模块 113
8、.2.4发送应答模块 144 软件测试 16结 论 18参考文献 18致 谢 19声 明 201 引言1.1 课题背景目前,对学校的实验室来说,IP地址的分配和管理是管理员比较重视的一个问题。而大部分管理员都采用的是DHCP技术来实现,DHCP技术是通过网络内一台服务器提供相应的网络配置服务来实现的,可以为网络终端设备提供临时的IP地址、默认网关、DNS服务器等网络配置。虽然DHCP技术可以为用户接入网络提供方便,但还存在一些弊端,例如: IP地址具有随机性,用户的IP地址是随机分配的,具有不确定性; 访问权限会发生变化,如果用户的访问权限是基于IP地址划分的,则访问权限随IP地址不同而变化;
9、不可被访问,通过DHCP获得的IP地址具有不确定性,用户被访问难度较大。 本系统对访问服务器的客户端网卡地址和分配其的IP地址进行记录,通过网卡地址来标识网内某一具体主机,并分配其固定的IP地址,从而弥补以上的一些不足之处。IP地址的设置由客户端实现。1.2 主要采用技术1.2.1 ADOADO(ActiveX Data Objects, ActiveX数据对象)是Microsoft为强大的数据访问接口 OLE DB(对象链接和嵌入数据库) 而设计的,是一个便于使用的应用层的编程接口。使用ADO编写的应用程序可以通过 OLE DB 提供者访问和操作数据库服务器中的数据。ADO不仅可以访问关系型
10、数据库,还可以访问非关系型数据库。同时由于OLE DB是基于COM接口的技术,使用这种技术可以直接对数据库的驱动程序进行访问,从而大大提供了访问速度。ADO最主要的优点是易于使用、速度快、内存支出少和磁盘冗余小。ADO 在关键的应用方案中使用最少的网络流量,并且在前端和数据源之间使用最少的层数,所有这些都是为了提供轻量、高性能的接口。1.2.2 多线程多线程是这样一种机制,它允许在程序中并发执行多个指令流,每个指令流都称为一个线程,彼此间互相独立。线程又称为轻量级进程,它和进程一样拥有独立的执行控制,由操作系统负责调度,区别在于线程没有独立的存储空间,而是和所属进程中的其它线程共享一个存储空间
11、,这使得线程间的通信远较进程简单。多个线程的执行是并发的,也就是在逻辑上“同时”,而不管是否是物理上的“同时”。如果系统只有一个CPU,那么真正的“同时”是不可能的,但是由于CPU的速度非常快,用户感觉不到其中的区别,因此我们也不用关心它,只需要设想各个线程是同时执行即可。多线程和传统的单线程在程序设计上最大的区别在于,由于各个线程的控制流彼此独立,使得各个线程之间的代码是乱序执行的。1.2.3 网络广播网络广播是指一个节点同时向相同域中的其它所有节点传输数据包的过程。组播是一种特殊的广播,其中一组请求收听的选定用户将收到广播。广播传输通常在局域网(如以太网)中进行,但有时也发生在虚拟局域网(
12、VLAN)中。IPv6 支持单播(Unicast)、组播(Multicast)以及任意播(Anycast)三种类型,IPv6 中没有关于广播(Broadcast)的具体划分,而是作为组播的一个典型。 网络广播中涉及以下重要概念: 广播域(Broadcast Domain):这是一个限定区域,其中的所有设备都可以共享信息。换句话说,与网络相连,且负责接收广播的所有设备都是同一广播域的一部分。在一个共享以太网中,工作站通过共享媒体将帧广播到其它所有节点。其它节点收听广播,只接收寻址到它们的帧。因此,共享以太网中的所有节点都属于同一广播域。此外通过虚拟局域网技术可以创建一个虚拟广播域。 广播地址(B
13、roadcast Address):这是一个特殊地址,当数据包可以寻址到该地址时,可以帮助所有设备打开和处理信息。例如,MAC 地址,格式为 1xFFFFFFFF 是一种广播地址;IP 地址255.255.255.255是通用广播地址。任何设备都将打开寻址到广播地址的信息,并将它们传送到下一个工作站。 广播风暴(Broadcast Storm):当主机系统响应一个在网上不断循环的广播数据包或者试图响应一个没有应答的系统时就会发生广播风暴。随着网络数据包数量的增加,广播风暴可能会引起网络拥塞问题。为防止广播风暴的发生,需要细心配置网络以阻止非法广播信息的进入。1.3 系统开发环境1.3.1 系统
14、软件环境本系统采用的软件工具有:开发工具:VC+6.0数据库:Microsoft Office Access 20031.3.2 工具简介Visual C+ 6.0是微软公司重点推出的核心产品之一,它在原MFC类库基础上进行了完善和扩充,功能更强,性能更优,使用更方便。MFC是指Microsoft Foundation Class ,它封装了Windows API的数据结构、函数及宏,以面向对象的类的形式供程序开发者编写各种类型的程序,包括Internet、数据库和多媒体方面的程序。Visual C+ 6.0类库在以下方面比前期版本功能更强。1.Visual C+6.0支持动态HTML。通过A
15、pp Wizard 可以轻松的编写基于Web浏览器的应用程序。新的CHtmlView 类封装了Internet Exploer 浏览器的功能,这样可以方便的编写浏览器风格的应用程序。2.Visual C+6.0支持Windows DNA(分布式Internet应用程序)架构。DNA技术完全支持Microsoft Back Office服务器方便的控件,包括微软的SQL Server,Transaction Server和Message Server。3.Visual C+ 6.0支持更多类型的ATL,包括DLL库、EXE文件、Web控件、数据库和Microsoft Back Office应用程
16、序。4.Visual C+ 6.0访问数据库的能力更强。它完全支持最新的微软数据库标准OLE DB,通过 COLEDBRecordView 类可以方便的浏览OLE DB数据库。2 系统需求概述本系统的主要目标是实现实验室计算机IP地址的自动分配和设置,将客户端的IP地址设置为固定IP地址。服务器可以安装在局域网内任意一台计算机上。实现方式主要有两种,一、由服务器自动为客户端分配固定的IP地址。当客户端第一次运行的时候,服务器自动为客户端分配一个IP地址,同时将客户端的网卡地址和分配给其的IP地址记录在数据库里,当客户端重新运行再次请求的时候,服务器从数据库中提取记录的IP地址,分配给客户端。二
17、、由管理员手动为客户端分配固定IP地址。管理员需要知道客户端的网卡地址,将客户端的网卡与对应匹配的IP地址直接录入Access数据库。当服务器收到客户端请求的时候,服务器从数据库中根据客户端的网卡地址查找对应IP地址,将此IP地址分配给客户端。由于某种原因,学生做实验时可能需要重新配置IP地址从而造成IP地址混乱的现象,通过重新启动客户端,可将各客户端IP地址还原。计算机IP地址固定可以方便根据IP地址设计计算机的权限和进行访问。系统具有一定的灵活性,如果客户端分配到的IP地址与其它计算机重合(可能是由于手工配置静态IP),客户端会发送二次请求,服务器会分配客户端一个临时的IP地址但并不记录入
18、数据库,在一定程度上保证了客户端IP地址的可用性。当客户端重新启动发出请求时,服务器为客户端分配数据库中记录的IP地址。3 系统模块设计与实现3.1 总体设计3.1.1 系统结构设计系统的主要功能需求为:配置分配的IP地址范围,接收客户端的请求,处理请求为客户端分配IP地址,将应答信息发送给客户端。根据系统需求可以将系统划分为以下主要模块。模块名称:配置系统信息功能描述:配置服务器为客户端分配的IP地址范围,服务器保留的IP地址,网关,子网掩码等信息。实现方式: 服务器并不是每次启动都需要配置IP信息,配置模块在单独的进程中实现。有对话框界面进行人机交互,将配置信息保存到系统盘的Windows
19、目录下的一个配置文件中,主程序运行时从配置文件中读取配置信息。模块名称:接收请求功能描述:接收网络发送来的请求包,验证请求包的正确性和完整性,并将请求信息保存。实现方式: 功能在单独的线程中实现。虽然客户端与服务器物理上在一个局域网内,但并不能保证逻辑上在一个网段内,所以客户端不知道服务器所在。为了使客户端发出的请求服务器能够正确接收,客户端采用数据链路层广播的方式发送请求。收到客户端请求后,通过验证包头信息判断请求包的正确性,将请求信息写入请求队列,没有请求到达线程在接收请求处阻塞。网络请求的接收采用Windows套接字编程实现。互斥资源的访问采用信号量机制。模块名称:处理请求功能描述:从请
20、求队列中读取请求信息,根据请求信息为客户端分配IP地址,将应答信息写入发送队列。实现方式:功能在单独的线程中实现。从配置文件中读取配置信息,判断管理员是否重新配置过,如果重新配置过则清空数据库记录。从请求队列中读取请求信息,判断是一次请求还是二次请求。一次请求,从数据库中根据网卡地址查找分配给其的IP地址,找到则把分配的IP地址写入发送队列,找不到则将最小的IP地址分配给其并写入数据库和发送队列,最小IP地址向上递增。二次请求,将最大IP地址分配给其但不写入数据库,写入发送队列,最大IP地址递减。互斥资源的访问采用信号量机制。模块名称:发送应答功能描述:从发送队列中读取应答信息,将子网掩码,网
21、关等信息封装为应答包,发送给客户端。实现方式:功能在单独的线程中实现。从配置文件中读取分配的子网掩码和网关。从发送队列中读取客户端的IP地址和分配给其的IP地址。因为不确定客户端和服务器是否在同一网段,所以还是采用广播的方式发送应答信息包。将子网掩码和网关封装进应答包以广播的形式发送出去。网络应答的发送采用Windows套接字编程实现,互斥资源的访问采用信号量机制。系统的结构如图:图1 系统模块结构3.1.2 通信协议客户端和服务器都不知道彼此的网络配置信息,网络通信采用数据链路层广播的形式,请求包和应答包均可到达目的地。网络通信协议定义如下:一次请求包:包头(reqip:)+包体(网卡地址:
22、计算机名)二次请求包:包头(REQIP:)+包体(网卡地址:计算机名)应答包:包头(repip:)+包体(客户端原IP地址:分配给客户端的IP地址:子网掩码:网关)3.1.3 数据库设计系统数据库只记录客户端的网卡地址、分配给客户端的IP地址和客户端的计算机名。数据库设计如下:数据库名称:IpAddr表名:IPaddress表1 数据库表结构字段名称数据类型说明mac文本网卡地址ip文本ip地址pcname文本计算机名3.2 编码实现3.2.1 配置模块配置模块的主要功能是配置为客户端分配的IP地址范围、保留的IP地址、子网掩码和网关。模块流程图如下:图2 配置模块流程图主要实现代码为:/得到
23、用户输入信息 m_maxIp.GetWindowText(maxIp); m_minIp.GetWindowText(minIp); m_netmask.GetWindowText(netMask); m_netgate.GetWindowText(netGate);/判定用户输入的合法性 if(maxIp.IsEmpty()|minIp.IsEmpty() MessageBox(输入的ip地址范围不能为空); return; if(netMask.IsEmpty()|netGate.IsEmpty() MessageBox(子网掩码或网关不能为空!); return; if(!cmpIPad
24、dr(char*)(LPCTSTR)minIp,(char*)(LPCTSTR)maxIp) MessageBox(地址段范围不合法!); return; /将配置信息写入配置文件 WritePrivateProfileString(FLAG,flag,true,IPaddrSer.ini);/写修改标志位 WritePrivateProfileString(MAXIP,maxip,maxIp,IPaddrSer.ini);/写最大IP地址 WritePrivateProfileString(MINIP,minip,minIp,IPaddrSer.ini);/写最小IP地址 WritePriv
25、ateProfileString(DISABLEIP,NULL,NULL,IPaddrSer.ini);/清空保留IP地址/重写保留IP地址 maxDisIpNo=m_disip.GetCount(); while(itemAddString(macaddr); /控件上显示请求信息 if(strcmp(temp,REQIP)=0)/二次请求包 /请求信息写入结点 memcpy(&pak,buf,npak); strcpy(addr.mac,0); strcpy(addr.pcname,pak.body); strcpy(addr.ip,inet_ntoa(saClient.sin_addr)
26、; CString macaddr=warning ! receive a request, the Macaddress is ; CString s=pak.macaddr; macaddr=macaddr+s; Log.WriteLog(char*)(LPCTSTR)macaddr); if(Write()=false)/将请求信息写入队列 MessageBox(NULL,write to queue fail!,Error!,MB_OK); Log.WriteLog(write to queue fail!); recptr-AddString(macaddr); /控件上显示请求信息
27、 3.2.3 处理请求模块处理模块请求主要功能是为客户端分配对应的IP地址,通过查询数据库为客户端分配固定的IP地址。模块流程图如下:图4 处理请求模块流程图主要实现代码如下: GetPrivateProfileString(FLAG,flag,000,flag,sizeof(flag),IPaddrSer.ini);/读取修改标志位 if(strcmp(flag,true)=0)/判断管理员是否重新配置过 if(!DeleteAll()/清空数据库记录 MessageBox(NULL,delete DB record fail ,Error!,MB_OK); Log.WriteLog(delete DB record fail ); return false; WritePrivateProfileString(FL
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1