




已阅读5页,还剩24页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验室计算机的实验室计算机的 IPIP 地址自动设置程序地址自动设置程序 客户端的设计与实现客户端的设计与实现 摘摘 要要 随着互联网的普及,我们的工作、学习和生活与网络联系越来越紧密,人 们搭建了许多不同的网络,如企业网、校园网和城区网等。由于采用 DHCP 技术 动态地为主机配置网络参数,可以有效解决目前 IP 地址资源不足(使用内部 IP)和无线网络用户的移动性等问题,并能极大地减轻大型网络管理员的工作 量,减少手动配置主机网络参数的错误,有利于我们快速地搭建一个大型网络 或修改其网络配置。因此,网络配置管理中越来越多地使用了 DHCP 服务器及技 术,随着网络应用的普及和深入,其应用范围将会愈来愈广。但目前国内对 DHCP 技术的研究大多只限于 DHCP 服务器的配置问题和 DHCP 协议本身,很少有 更深入的研究。我们在使用 DHCP 技术对主机网络参数进行动态地配置与管理的 同时,理所当然地认定了其唯一合理性和不可取代性。我们就实验室计算机网 络配置与管理为背景,研究在此特定环境下通过 UDP 广播分配 IP(服务器) 、 配置 IP(客户端)的问题,以此在一定程度上取代 DHCP 技术,对实验室计算 机网络参数进行快捷有效的配置与管理。具体来讲,主要内容和工作有: (1)介绍 DHCP 协议及 DHCP 工作原理 (2)介绍 ARP 协议和 ARP 工作原理 (3)系统的分析、设计、实现与测试 关键词关键词:DHCP;ARP;IP 配置;多线程 The Automatic IP Address Configuration Software for Lab Design and Implementation of Client Abstract With the prevalence of Internet, the relation between peoples life and network becomes closer and closer, and various networks, such as enterprise network, campus network and public network etc. are being built. DHCP servers and DHCP technology for configuring network parameters can solve the problems of the shortage of IP addresses and the mobility of wireless network user, and as a consequence they greatly lighten the work of network administrator, and reduce mistakes from the manual configuration. They are quite useful for the fast set-up of a large-scale network or modifying its parameters. So DHCP technology will be applied more and more frequently in networks. Now researches on DHCP only focuses on the configuration of DHCP server and DHCP protocol, and people seldom do any deeper researches. When we are using DHCP technology to configure and manage network parameters of hosts, we think naturally that DHCP technology is the only way to solve the problem and that it can not be replaced. Based on the configuration and management of the hosts in the laboratory, this paper proposes a way to assign (server side software) and configure (client side software) network parameters, using the UDP broadcast instead of the DHCP technology. This software can make the problems easier to solve. The main content includes following points: (1) Introducing DHCP protocol and its theory (2) Introducing ARP protocol and its theory (3) Introducing the analyse, design, implementation and test of this software Key words: DHCP; ARP; IP configuration; multithread 目目 录录 论文总页数:25 页 1引言1 1.1课题背景.1 1.2国内外的研究现状.2 1.3本课题的研究意义.2 1.4本课题的研究方法.2 2DHCP 协议与 ARP 协议及他们的工作原理3 2.1DHCP 协议概述3 2.2DHCP 工作原理3 2.3ARP 协议概述 5 2.4ARP 工作原理 5 3系统的分析、设计、实现与测试6 3.1系统的分析.6 3.2系统的设计.6 3.3系统的实现.11 3.4系统的测试.20 结 论23 参考文献23 致 谢24 声 明25 第 1 页 共 25 页 1 1 引言引言 1.11.1 课题背景课题背景 TCP/IP 网络在 Internet 和 Intranet 领域中占据越来越大的比重,人们日 常的工作、学习、生活正同网络日益密切地联结在一起,网络如同呼吸一样, 正成为许多人赖以生存发展的工具。网络对企业有着更为重要的作用。网络这 一高速的信息流动媒体,是企业内部加快物流、资金流,加快信息的流动,实 现资源共享、加强企业内部管理的一个重要手段。 但是,TCP/IP 网络基本是手动配置的,需要很大的工作量,必须配置的网 络参数包括 IP 地址、子网掩码、网关地址、DNS 地址。另一方面,随着笔记本 电脑的普及,大量的移动用户入网时需要配置网络参数。企业内部用户因工程、 项目的组合和分解,也常会变动用户计算机所在的网络。这些因素使网络具有 了很强的动态性,加重了网络配置的难度。据保守的估计,对每个 IP 的更改都 要花费大约 5 分钟。那么,对于一个有 100 节点的小网络来说,一个网络管理 员要花费 8 个小时来做这些必要的修改。随着网络的扩展,这种工作将变得越 来越难以负担,并极易发生错误。如何成功的配置这些系统,把握好对 TCP/IP 网络的控制权,是包括拥有企业网、校园网、公众网等的大型企业、院校、网 络接入提供商(ISP)的必须认真和严肃对待的问题。 DHCP 技术可以解决上述问题。网络管理员可以验证 IP 地址和其它配置参 数,而不用去检查每个主机;DHCP 服务器不会同时租借相同的 IP 地址给两台 主机;DHCP 管理员可以约束特定的计算机使用特定的 IP 地址;可以为每个 DHCP 作用域设置很多选项;客户机在不同子网间移动时不需要重新设置 IP 地 址。正由于 DHCP 技术的以上优点,所以在网络中越来越多的采用了 DHCP 服务 器来配置网络。但是,通过查阅大量的相关资料,我们发现 DHCP 技术在解决配 置主机网络参数的问题时,也存在一定的不足。首先,DHCP 不能发现网络上非 DHCP 客户机已经在使用的 IP 地址;其次,当网络上存在多个 DHCP 服务器时, 一个 DHCP 服务器不能查出已被其它服务器租出去的 IP 地址;再次,DHCP 服务 器不能跨路由器与客户机通信,除非路由器允许 BOOTP 转发;最后,DHCP 服务 器的配置相对复杂、繁琐,即使是专门的网络管理人员,在配置 DHCP 服务器的 时候也难免遇见一些难以解决的问题。针对 DHCP 技术在某些特定环境下的以上 几点不足之处,为避免网络管理人员在配置和管理计算机网络参数的时候遇见 各式各样的问题,减轻网络管理人员的负担,使其对计算机进行更方便、更快 捷、更有效的配置与管理,我们研究开发了实验室计算机的 IP 地址自动设置程 序,用以在某些特定环境下在一定程度取代 DCHP 技术。 第 2 页 共 25 页 1.21.2 国内外的研究现状国内外的研究现状 从有关的文献资料和网络资源来看, 国外许多组织很早便积极开展对 DHCP 技术的研究工作,IETF 对此做了大量的工作。提出了一系列 RFC 文档,例如: 1985 年 9 月提出的 RFC951 中提出了 BOOTSTRAPPROTOCOL,标志着 DHCP 的前身 BOOTP 的诞生;1993 年 10 月,Bucknell University 的 R.Droms 在 RFC1541 中 正式提出了 DHCP 技术,在原来 BOOTP 的基础上,增加了在 TCP/IP 网络上自动 分配可重用 IP 地址和可选的网络配置参数的功能;1997 年 3 月,R.Droms 在 RFC2131 中完善了 DHCP 技术,增加了对中继代理的支持,并增加了网络配置参 数的可选项;同期,RFC2132 中详细的解释了 DHCP 协议中的各个选项的格式及 意义。自此 DHCP 技术已经基本成型。 国外许多公司也积极开展 DHCP 软件的研究和开发工作。其中比较有影响力 的是国际软件联盟 ISC(Internet Software Consortium)开发的基于 Linux 平 台的 DHCP 服务器;IBM 的 DHCP 服务器只限定在 IBM AIX 及 Windows NT 系统下 运行;微软公司开发的 DHCP 服务只限定在 Windows NT/2000 服务器系统下运行。 国内对 DHCP 方面的研究不多。只有少数大型企业开发自主的 DHCP 服务器 仅在企业内部使用。 1.31.3 本课题的研究意义本课题的研究意义 随着网络技术的迅速发展,网络与我们的生活越来越密切相关,如何方便、 快捷、有效的对一个网络进行管理,一直是一个让网络管理人员颇为困惑的问 题。DHCP 技术的出现、发展与运用,给网络管理人员带来了极大的便利。由于 DHCP 技术源自国外,国内对 DHCP 技术的研究极其的少,而我们国家为解决 IP 资源严重不足的问题,需要大量使用 DHCP 技术。因此,开展对 DHCP 技术的研 究,对促进国产 DHCP 软件在工程建设中的使用,解决目前非常紧张的国内 IP 地址空间问题,弥补国产网络管理软件的空白等具有重要的实际意义。 1.41.4 本课题的研究方法本课题的研究方法 本系统名为实验室计算机的 IP 地址自动设置程序 ,其应用环境是实验 室这样一个特定的环境,其目的是便于网络管理人员对实验室计算机的网络参 数进行方便、快捷、有效的配置与管理。首先,我们分析了 DHCP 技术的工作 原理,掌握了 DHCP 服务器与客户端交互的过程。其次,考虑到 DHCP 技术本 身的复杂性,我们提出了使用 UDP 广播进行通信,并自定义通讯协议这样相对 简单的系统解决方案。接着,我查阅了 Windows 系统判断 IP 地址冲突的机制, Windows 系统配置 IP 等网络参数的原理,并进一步研究分析了 UDP 广播通讯、 ARP 地址解析协议、Windows 平台下 Socket 网络编程等相关问题。最后,我设 第 3 页 共 25 页 计了本系统客户端程序,并在 Visual C+ 6.0 开发环境下实现了全部功能。 2 2 DHCPDHCP 协议与协议与 ARPARP 协议及他们的工作原理协议及他们的工作原理 2.12.1 DHCP 协议概述协议概述 DHCP 是 Dynamic Host Configuration Protocol(动态主机分配协议)的缩写, 代表动态主机配置协议。DHCP 是对允许无盘工作站连接到网络并且自动获取一 个 IP 地址的 BOOTP 协议的一个扩展。 DHCP 向网络主机提供配置参数,它由两个基本部分组成:一部分是向网络 主机传送专用的配置信息,另一部分是给主机分配网络地址。DHCP 可以向每一 个网络客户提供一个 IP 地址,子网掩码,缺省网关,一个 WINS 服务器的工 P 地址,以及一个 DNS 服务器的 IP 地址等等。 DHCP 是基于客户/服务器模式的,这种模式下,专门指定的主机分配网络 地址,传送网络配置参数给需要的网络主机,被指定的主机称为服务器。我们 以后将提供 DHCP 服务的主机称为服务器,把接收信息的主机称为客户。 DHCP 支持三种 IP 地址分配方法。第一种是自动分配,DHCP 给用户分配一 个永久的 IP 地址。第二种是动态分配,在这种情况下,用户可以取得一个 IP 地址,但有时间限制。第三种是手工分配,在这种方法下,用户的 IP 地址是由 管理员手工指定的,在这种情况下,DHCP 服务器只需要将这个指定的 IP 地址 传送给用户即可。至于用什么样的分配方法,不同的网络各不相同。 动态分配是唯一的一种允许自动重用地址的机制。因此,这种方法对于有 临时上网用户,并且网络的 IP 地址资源比较紧缺情况下特别有用。而手工指定 方法对于管理不希望使用动态 IP 地址的用户十分方便,不会因为手工指定而和 DHCP 冲突或和别的已经分配的地址冲突。DHCP 是一种相对集中式的管理方式。 2.22.2 DHCP 工作原理工作原理 当客户使用 DHCP 服务器获取 IP 时,它处于六个状态之一,如图 21 所示。 第 4 页 共 25 页 图 21 DHCP 状态转移图 DHCP 的工作过程如图 22 所示。 图 22 DHCP 的工作过程 1.发现阶段,即 DHCP 客户主机寻找 DHCP 服务器的阶段。DHCP 客户机以广 播方式(因为 DHCP 服务器的 IP 地址对于客户机来说是未知的)发送 DHCPDISCOVER 发现信息来寻找 DHCP 服务器,即向地址 255.255.255.255 发送 特定的广播信息。网络上每一台安装了 TCP/IP 协议的主机都会接收到这种广播 信息,但只有 DHCP 服务器才会做出响应。 2.提供阶段,即 DHCP 服务器提供 IP 地址的阶段。在网络中接收到 DHCPDISCOVER 发现信息的 DHCP 服务器都会做出响应,它从尚未出租的 IP 地址 中挑选一个分配给 DHCP 客户机,向 DHCP 客户机发送一个包含出租的 IP 地址和 其他设置的 DHCPOFFER 提供信息。 3.选择阶段,即 DHCP 客户机选择某台 DHCP 服务器提供的 IP 地址的阶段。 如果有多台 DHCP 服务器向 DHCP 客户机发来的 DHCPOFFER 提供信息,则 DHCP 客 户机只接受第一个收到的 DHCPOFFER 提供信息,然后它就以广播方式回答一个 第 5 页 共 25 页 DHCPREQUEST 请求信息,该信息中包含向它所选定的 DHCP 服务器请求 IP 地址 的内容。之所以要以广播方式回答,是为了通知所有的 DHCP 服务器,他将选择 某台 DHCP 服务器所提供的 IP 地址。 4.确认阶段,即 DHCP 服务器确认所提供的 IP 地址的阶段。当 DHCP 服务器 收到 DHCP 客户机回答的 DHCPREQUEST 请求信息之后,它便向 DHCP 客户机发送 一个包含它所提供的 IP 地址和其他设置的 DHCPACK 确认信息,告诉 DHCP 客户 机可以使用它所提供的 IP 地址。然后 DHCP 客户机便将其 TCP/IP 协议与网卡绑 定,另外,除 DHCP 客户机选中的服务器外,其他的 DHCP 服务器都将收回曾经 提供的 IP 地址。 5.重新登录。以后 DHCP 客户机每次重新登录网络时,就不需要再发送 DHCPDISCOVER 发现信息了,而是直接发送包含前一次所分配的 IP 地址的 DHCPREQUEST 请求信息。当 DHCP 服务器收到这一信息后,它会尝试让 DHCP 客 户机继续使用原来的 IP 地址,并回答一个 DHCPACK 确认信息。如果此 IP 地址 已无法再分配给原来的 DHCP 客户机使用时(比如此 IP 地址已分配给其它 DHCP 客户机使用) ,则 DHCP 服务器给 DHCP 客户机回答一个 DHCPNAK 否认信息。当原 来的 DHCP 客户机收到此 DHCPNAK 否认信息后,它就必须重新发送 DHCPDISCOVER 发现信息来请求新的 IP 地址。 6.更新租约。DHCP 服务器向 DHCP 客户机出租的 IP 地址一般都有一个租借 期限,期满后 DHCP 服务器便会收回出租的 IP 地址。如果 DHCP 客户机要延长其 IP 租约,则必须更新其 IP 租约。DHCP 客户机启动时和 IP 租约期限过一半时, DHCP 客户机都会自动向 DHCP 服务器发送更新其 IP 租约的信息。 2.32.3 ARP 协议概述协议概述 ARP,全称 Address Resolution Protocol,中文名为地址解析协议,它工 作在数据链路层,在本层和硬件接口联系,同时对上层提供服务。 IP 数据包常通过以太网发送,以太网设备并不识别 32 位 IP 地址,它们是 以 48 位以太网地址传输以太网数据包。因此,必须把 IP 目的地址转换成以太 网目的地址。在以太网中,一个主机要和另一个主机进行直接通信,必须要知 道目标主机的 MAC 地址。但这个目标 MAC 地址是如何获得的呢?它就是通过地 址解析协议获得的。ARP 协议用于将网络中的 IP 地址解析为的硬件地址(MAC 地址) ,以保证通信的顺利进行。 2.42.4 ARP 工作原理工作原理 1首先,每台主机都会在自己的 ARP 缓冲区 (ARP Cache)中建立一个 ARP 列表,以表示 IP 地址和 MAC 地址的对应关系。 2当源主机需要将一个数据包要发送到目的主机时,会首先检查自己 ARP 第 6 页 共 25 页 列表中是否存在该 IP 地址对应的 MAC 地址,如果有就直接将数据包发送到这 个 MAC 地址;如果没有,就向本地网段发起一个 ARP 请求的广播包,查询此目 的主机对应的 MAC 地址。此 ARP 请求数据包里包括源主机的 IP 地址、硬件地址、 以及目的主机的 IP 地址。 3网络中所有的主机收到这个 ARP 请求后,会检查数据包中的目的 IP 是 否和自己的 IP 地址一致。如果不相同就忽略此数据包;如果相同,该主机首先 将发送端的 MAC 地址和 IP 地址添加到自己的 ARP 列表中,如果 ARP 表中已经存 在该 IP 的信息,则将其覆盖,然后向源主机发送一个 ARP 响应数据包,告诉 对方自己是它需要查找的 MAC 地址; 4源主机收到这个 ARP 响应数据包后,将得到的目的主机的 IP 地址和 MAC 地址添加到自己的 ARP 列表中,并利用此信息开始数据的传输。如果源主 机一直没有收到 ARP 响应数据包,表示 ARP 查询失败。 3 3 系统的分析、设计、实现与测试系统的分析、设计、实现与测试 3.13.1 系统的分析系统的分析 本系统名为实验室计算机的 IP 地址自动设置程序客户端的设计与实 现 ,所需要完成的功能就是与服务器程序通讯,获取服务器分配过来的 IP 地 址等网络参数信息,然后对本计算机的网络参数进行配置,并且让这些配置立 即生效。这里涉及到这样几个问题: 一、客户端程序如何与服务器程序进行通信,采用什么方式进行交互。 二、如何有效判断接收到的数据信息就是客户端需要的信息。 三、如何判断服务器分配给客户端的 IP 地址信息是否已被其他主机占用。 四、如果 IP 已被占用后客户端与服务器如何处理。 五、如何快速有效的配置 IP 地址等网络参数信息。 六、如何使配置好的网络参数立即生效。 七、如何保证客户端主机一启动,本客户端程序就随之启动。 八、如何保证用户界面的有好性,防止本客户端程序假死。 九、如何保证本客户端程序在完成预期功能后,自动退出。 3.23.2 系统的设计系统的设计 针对系统分析时列出的几个问题,我查阅大量有关资料,认真分析了 DHCP 技术的实现机制,并考虑到本系统的实际应用环境。决定采用以下方案 来解决上述问题,以完成本系统客户端的全部功能。 一、考虑到服务器逻辑位置的不可预知性,本系统的客户端与服务器均采 用 UDP 广播进行通信。并且采用只需一次请求,一次应答的交互方式,摒弃了 DHCP 技术的发现服务器、服务器应答、选择服务器、服务器确认提供信息这 第 7 页 共 25 页 样四个步骤的相对繁琐的机制。 二、我们自行定义了客户端与服务器通信的格式,客户端和服务器分别在 特定端口上接收到数据以后,都将对数据的有效性进行判断,如果不是预期的 通信数据,那么这些数据将被立即丢弃。只有符合我们自定义格式的有效数据, 才会被进一步处理。 三、在分析 Windows 系统检测 IP 地址是否冲突的时候,发现 Windows 系 统是以广播的方式向局域网内发送针对特定 IP 地址的 ARP 请求,以此来判断 IP 地址是否冲突的。此方法快速、准确、有效。本客户端程序也采用同样的机 制来检测 IP 地址是否被占用。客户端在接收到服务器分配的 IP 地址等网络参 数信息以后,将以广播的方式向整个局域网络发送针对服务器分配的 IP 地址的 ARP 请求,以此可以判断该 IP 地址是否已经被局域网内其他主机占用。 四、如果客户端得到的服务器分配的 IP 地址已经被其他主机占用,那么客 户端将向服务器再次发送分配 IP 的请求,此时的请求消息与正常情况下发送的 请求消息将有所不同。以此告诉服务器该 IP 地址已经被占用,便于服务器做相 应的处理。 五、配置本机 IP 地址等网络参数信息的方式有很多种,比如可以使用 Windows 自带的工具 NETSH,还可以通过某些 API 函数向 Windows 系统维护 的地址结构体中添加新的 IP 地址等信息。本程序为了更快速、更有效的配置 IP 地址等网络参数信息,首先获取本机网络适配卡的相关信息,然后据此修改注 册表中与其对应的 IP 地址等网络参数信息。 六、一般情况下,由于 Windows 系统要求更改网络参数后,必须重启计算 机才能使更改后的网络参数信息生效。但是我们注意到我们使用电脑的时候, 以图形界面的方式更改网络连接的参数后,新配置的网络参数会立即生效。同 样的,在使用 DHCP 技术配置客户端计算机的网络参数的时候,客户端配置好 IP 地址等网络参数信息后,并没有重启计算机就能立即生效。通过查阅有关资 料,我们发现在使用 DHCP 技术进行计算机网络参数的配置时,在更改了网络 参数以后,系统调用了一个微软并没有公布的 API 用以通告网络参数的改变, 此 API 名为:DhcpNotifyConfigChange,位于 dhcpcsvc.dll 中。我们的程序在配 置好网络参数以后,也调用该 API 函数,通告网络参数的改变,以使新配置的 网络参数立即生效。 七、由于本程序的特殊性,要求本程序像 DHCP 的客户端服务一样,在计 算机启动以后,本程序也随之立即启动运行,而不是用户每次来点击运行,用 户只要在某计算机上运行一次本程序,以后不需再做任何的操作,本程序将随 计算机开机运行,对本计算机的网络参数进行配置。考虑到在每台电脑上,本 第 8 页 共 25 页 程序的所在的逻辑位置很可能不相同,导致开机自启动的功能没法预期实现。 本程序借鉴了木马程序中常用的两个技术来保障开机自启动的功能按照预期的 完成。首先,本程序每次执行的时候,都将自身文件拷贝到系统的 System32 目 录下,以保证本程序不被一般用户随意或不小心删除。然后,通过向注册表中 HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionRun 写 入本程序的键值来实现开机自启动的功能。 八、考虑到用户界面的友好性,以及对本程序速度方面的要求,本程序采 用多线程机制实现系统预期的功能。本程序运行以后,首先创建一个工作者线 程 InitThread 用以做一些初始化的工作,如初始化本机 IP 地址信息、初始化本 客户端套接字信息等。在完成了所有的初始化工作以后,InitThread 创建了另外 三个工作者线程用以完成其他的功能,在创建好另外三个线程以后,InitThread 线程结束。另外三个线程分别是 RecvThread、SendThread 和 SetThread。RecvThread 线程专门负责接收服务器发送来的消息,并在判断消息 的有效性后提取网络参数的相关信息。SendThread 专门负责发送请求消息到服 务器,根据是否由于 IP 地址被占用的标志的不同取值,发送的请求消息有所不 同。SetThread 负责在接收到服务器分配的 IP 地址后,对该 IP 地址是否已经被 占用进行判断,如果没有被占用则设置本计算机 IP 地址等网络参数信息。由于 本客户端程序采用了多线程的机制,线程之间如何实现同步也是必须很好地解 决的问题。如果线程之间同步工作没有做好,那么程序将会出现不可预料的结 果。本程序通过使用临界区对象来解决线程与线程之间的同步问题。把临界区 对象设置为全局对象,然后在创建线程之前,对该临界区对象进行初始化。每 个线程在需要对一些全局变量进行访问的时候,必须先进入临界区,在完成必 要的工作以后,再退出临界区。某个线程在临界区里面的时候,其他线程只能 等待。只有等到该线程退出临界区以后其他线程才能进入临界区。临界区对象 保证了全局变量的安全性,保证了线程与线程之间同步地相互协调地工作。 九、考虑到用户操作的简便性,本程序在正确地配置好 IP 地址等网络参数 信息后,将不要求用户点击关闭按钮以退出本程序。本程序检测正确完成预期 功能以后,将以发送消息的方式要求本程序结束运行,系统在接收到该消息以 后,将结束本程序。 本程序的流程图如图 5.15.5 所示: 第 9 页 共 25 页 图 51 客户端程序启动后 图 52 InitThread 线程函数 第 10 页 共 25 页 图 53 RecvThread 线程函数 图 54 SendThread 线程函数 第 11 页 共 25 页 图 55 SetThread 线程函数 3.33.3 系统的实现系统的实现 在分析并设计好了本客户端程序以后,我在 Windows2003SP1 Visual C+ 6.0SP6 PlatformSDK_Svr2003SP1 的环境下实现了本客户端程序。下面 分别介绍各个功能的具体实现。 一、随开机自启动的功能的实现。首先,获取 System32 目录的系统路径和 本程序所在的系统路径。然后,检测 System32 目录下面是否存在本程序,如果 不存在则拷贝自身到 System32 目录下面。接着,再把本程序写入注册表的开机 启动项里面,以实现开机自启动的功能。本部分的主要代码如下: - (省略) / 获取 System32 的路径 if (GetSystemDirectory(SysPath, sizeof(SysPath) = 0) /AfxMessageBox(“Get System32 Path Failed“); / 获取本程序当前路径和名字 if (GetModuleFileName(NULL, FilePathAndName, sizeof(FilePathAndName) = 0) /AfxMessageBox(“Get Current File Path And Name Failed“); 第 12 页 共 25 页 / 拷贝本程序到 System32 LPSTRlpFileNewPathAndName; lpFileNewPathAndName = lstrcat(SysPath, “); lpFileNewPathAndName = lstrcat(lpFileNewPathAndName, lpFileName); / 判断 System32 下是否存在本文件 if (PathFileExists(lpFileNewPathAndName) = FALSE) / 如果不存在就拷贝 if (CopyFile(FilePathAndName, lpFileNewPathAndName, FALSE) = 0) /AfxMessageBox(“Copy File To System32 Failed“); / 写开机自启动的注册表键值 LPCTSTR lpRegSubPath = “SoftwareMicrosoftWindowsCurrentVersionRun“ ; HKEY hKey; LONG lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, lpRegSubPath, 0, KEY_WRITE, if(lRet = ERROR_SUCCESS) DWORD dwRet = strlen(lpFileNewPathAndName); lRet = RegSetValueEx( hKey, lpRegKeyName, 0, REG_SZ, (BYTE *)lpFileNewPathAndName, dwRet); RegCloseKey(hKey); if(lRet != ERROR_SUCCESS) /AfxMessageBox(“Autorun Failed“); (省略) - 二、初始化本机 IP 地址等网络参数。首先,随机产生网络参数信息。然后 获取网卡的信息以填充特定结构体,以便配置网络参数。接着,在填充好了相 关结构体后,通过写注册表的方式,把新的网络参数写入注册表,最后再调用 未公布的 API 用以通告网络参数的更改,以使新配置的网络参数立即生效。本 部分的主要代码如下: - (省略) if (GetAdaptInfo()/ 获取网卡信息填充 m_pAdapterInfo 指向的结构体 if (SetIP(clientip,clientmask,clientgate) 第 13 页 共 25 页 return TRUE; / 设置 IP 成功则返回 TRUE (省略) if (!SetIPToReg(pAdapterName, pIPAddress, pSubnetMask, pDefaultGateway) return FALSE; if (!NotifyIPChange(nIndex, pAdapterName, pIPAddress, pSubnetMask) return FALSE; (省略) - 三、将 IP 地址等网络参数写入注册表。首先,打开注册表,接着对特定的 键写入信息。最后再关闭注册表。本部分的主要代码如下: - (省略) HKEY hKey; string strKeyName = “SYSTEMCurrentControlSetServicesTcpipParametersInterfaces“; strKeyName += pAdapterName; if (ERROR_SUCCESS != RegOpenKeyEx(HKEY_LOCAL_MACHINE, strKeyName.c_str(), 0, KEY_WRITE, (省略) if(ERROR_SUCCESS != RegSetValueEx( hKey, “IPAddress“, 0, REG_MULTI_SZ, (unsigned char*)mszIPAddress, nIP) return FALSE; if(ERROR_SUCCESS != RegSetValueEx( hKey, “SubnetMask“, 0, REG_MULTI_SZ, (unsigned char*)mszSubnetMask, nMask) return FALSE; if(ERROR_SUCCESS != RegSetValueEx(hKey, “DefaultGateway“, 0, REG_MULTI_SZ, (unsigned char*)mszDefaultGateway, nGate) return FALSE; 第 14 页 共 25 页 (省略) - 四、通告 IP 地址等网络参数的更改。该功能的实现是通过调用未公布的 API 来实现的。本部分的主要代码如下: - (省略) MultiByteToWideChar(CP_ACP, 0, pAdapterName, -1, wcAdapterID,256); if (hDhcpDll = LoadLibrary(“dhcpcsvc“) = NULL) return FALSE; if (pDhcpNotifyProc = (DHCPNOTIFYPROC)GetProcAddress(hDhcpDll, “DhcpNotifyConfigChange“) != NULL) if (pDhcpNotifyProc)(NULL, wcAdapterID, TRUE, nIndex, inet_addr(pIPAddress), inet_addr(pSubnetMask), 0) = ERROR_SUCCESS) bResult = TRUE; FreeLibrary(hDhcpDll); (省略) - 五、初始化本地客户端套接字信息。首先,加载套接字库。然后,创建套 接字并设置套接字选项为广播。接着,再初始化本地套接字信息。最后,绑定 套接字到客户端特定的端口。本部分的主要代码如下: - (省略) / 创建套接字 sockClient = socket(AF_INET, SOCK_DGRAM, 0); / 地址可复用设置 INT nReuse = SO_REUSEADDR; setsockopt(sockClient, SOL_SOCKET, SO_REUSEADDR, (CHAR*) / 设置套接字选项为广播 BOOL bBroadcast = TRUE; setsockopt(sockClient, SOL_SOCKET, SO_BROADCAST, (CHAR*) / 初始化本地客户端套接字地址信息结构体 第 15 页 共 25 页 SOCKADDR_IN addClient; addClient.sin_addr.S_un.S_addr = htonl(INADDR_ANY); addClient.sin_family = AF_INET; addClient.sin_port = htons(CLIENTPORT); / 绑定套接字到本地 IP 和端口(CLIENTPORT) if(bind(sockClient, (SOCKADDR*) WSACleanup(); return FALSE; (省略) - 六、InitThread 线程的实现。InitThread 线程主要做一些初始化的工作,如 设置开机自启动、获取计算机名、获取当前用户名、初始化本机 IP 地址等网络 信息、初始化套接字、创建另外三个工作者线程等。本部分的主要代码如下: - (省略) / 设置本程序为开机自启动 AutoRun(); / 获取计算机名 GetCompName(hWnd); / 获取当前用户名 GetCurrentUserName(hWnd); / 初始化本机 IP 地址 while (TRUE) if (InitLocalIP() break; / 初始化本机套接字 while (TRUE) if (InitSocket() break; / 创建 RecvThread 线程 while (TRUE) 第 16 页 共 25 页 HANDLE hRecv; hRecv = CreateThread( NULL, 0, (LPTHREAD_START_ROUTINE)RecvThread,(LPVOID)hWnd, 0, NULL); if (hRecv != NULL) CloseHandle(hRecv); break; / 创建 SendThread 线程 while (TRUE) HANDLE hSend; hSend = CreateThread( NULL, 0, (LPTHREAD_START_ROUTINE)SendThread, (LPVOID)hWnd, 0, NULL); if (hSend != NULL) CloseHandle(hSend); break; / 创建 SetThread 线程 while (TRUE) HANDLE hSet; hSet =CreateThread( NULL, 0, (LPTHREAD_START_ROUTINE)SetThread,(LPVOID)hWnd, 0, NULL); if (hSet != NULL) CloseHandle(hSet); break; (省略) - 七、RecvThread 线程的实现。RecvThread 线程主要实现数据的接收功能。 在判断数据的有效性后,对 IP 地址等网络参数信息进行提取。本部分的主要代 码如下: - (省略) while (TRUE) 第 17 页 共 25 页 / 阻塞函数放在临界区外
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 骨髓瘤影像课件
- 健康管理信息系统建设方案
- 矿山环境保护工程实施
- 天然气能源替代规定
- 公共交通优化管理规定
- 地产活动客户关系管理制度
- 工作总结:创新思维激发团队创造力
- 石油勘探成本控制操作指引策略制定
- 社交媒体广告投放方案制定
- 商业地产市场调研分析预测报告分析内容详解
- 三轴搅拌桩安全技术交底(好)
- DL/T5315-2014水工混凝土建筑物修补加固技术规程(完整)
- 心脏瓣膜病超声诊断
- 剑桥国际英语教程词汇指南初级版
- 2023年民营医院某年经营管理崭新思路
- 澄迈县深水网箱养殖用海项目整体 环评报告
- 35kV室内避雷器预防性试验实施方案
- 中学副校长培训方案
- 培训记录签到表
- 《弘扬朱子文化》的主题班会
- 《竹节人 》第二课时ppt
评论
0/150
提交评论