




已阅读5页,还剩35页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
毕毕 业业 设设 计计( 论论 文文) 端口信息探测工具的设计与实现端口信息探测工具的设计与实现 论论文作者姓名:文作者姓名: 申申请请学位学位专业专业: : 申申请请学位学位类别类别: : 指指导导教教师师姓姓名名( (职职称称) ): : 论论文提交日期:文提交日期: 端口信息探测工具的设计与实现端口信息探测工具的设计与实现 摘摘 要要 端口扫描技术是一种融合了信息安全、信息科学、和计算机技术为一体的 综合性技术。本系统建立在 windows 操作系统上,有 ping 和 scan 两个模块。 可以探测目标主机是否开机和对目标主机的端口信息进行探测,并获取端口是 否开放等信息。全文对 tcp 建立连接的原理,winsock 原理,端口扫描技术的 基本原理和扫描方式都进行了比较详细的介绍。在具体的实现过程中,结合面 向对象的程序设计思想,采用典型的 tcp connect()扫描技术。通过本程序的实 现,用户可以对一台目标主机进行端口扫描,获取端口信息。 关键词关键词: 端口;探测;扫描 design and implementation of a port information probe tool abstract scanning technique of port is a synthetic technique which involves information security, information science, and computer technology .this system is build on the windows operate system. it has the ping and scan modules .it can probe into whether a target host is opening and probe into the port information of the target host, and obtain the information with whether a port is opening. the full text explain in detail with principle of the tcp connection, principle of the winsock, the basic principle of the port scan and the scan method .when implementing, it combine the thought of the face to object, use the typical method which is the tcp connect .through the realization of this procedure, the user can scan the port with a target host, and obtain information. key word: port;probe;scan 目目 录录 论文总页数:28 页 1 引言 1 1.1 端口信息探测的背景 1 1.2 端口信息探测工具的设计要求 1 1.2.1 研究内容 1 1.2.2 开发工具 1 1.2.3 软件功能设计 1 1.3 端口信息探测工具的设计原则 1 2 理论基础 2 2.1 tcp 传输控制协议 2 2.1.1tcp 概述 .2 2.1.2 tcp 首部 2 2.1.3 tcp 连接的建立 3 2.1.4 tcp 连接的终止 4 2.2 端口扫描技术5 2.2.1 概述 5 2.2.2 端口扫描原理 5 2.2.3 端口扫描常用方式介绍 5 2.3 winsock 套接字 7 2.3.1 winsock.7 2.3.2 winsock 原理 7 2.3.3 套接字类型 8 2.3.4 使用套接字流程 8 3 总体设计 9 3.1 模块划分 9 3.1.1 功能模块图 9 3.1.2 主要功能模块介绍 9 3.2 设计实现流程图 .10 4 端口信息探测工具的详细设计与实现.10 4.1 软件界面.10 4.2 ping 按钮实现 11 4.2.1 ping 按钮实现流程图 11 4.2.2 ping 按钮总体实现过程 12 4.3 scan按钮实现 .13 4.3.1 scan 按钮实现流程图 13 4.3.2 scan 按钮总体实现过程 14 5 软件测试 .16 5.1 测试的目的和定义 .16 5.1.1 测试的目的 .16 5.1.2 测试的定义 .17 5.2 端口信息探测工具测试计划 .17 5.2.1 测试环境 .17 5.2.2 测试项目及说明 .17 5.3 端口信息探测工具测试计划执行情况 .17 5.3.1 ping 模块测试结果 17 5.3.2 scan 模块测试结果 19 5.4 端口信息探测工具需求测试结论 .20 5.5 评价 .20 结 论.20 参考文献.20 附 录21 致 谢.27 声 明.28 1 1 引言引言 1.11.1 端口信息探测的背景端口信息探测的背景 信息技术的广泛应用,深刻的改变了人们的生活方式,推动着文明的的进 步。随着信息化的普及和发展,互联网覆盖了社会政治,经济,文化,生产的 各个领域,网络攻击充斥着大大小小的网络中。无论黑客和红客,应用各种网 络攻击方式,对目标方进行,刺探,侦听,欺骗和侵入,已达到己方的目的。 而在网络攻击之前,如何有效查知被攻击方的有用信息是必要的不可缺少的, 所以端口扫描技术孕育而生。 1.21.2 端口信息探测工具的设计要求端口信息探测工具的设计要求 1.2.11.2.1 研究内容研究内容 (1)tcp/ip 协议,tcp 连接的建立与终止的过程。 (2)windows 网络编程,winsocket 的使用。 (3)端口扫描原理,各种端口扫描方式。 (4)研究对一个端口信息探测工具的需求分析,模块划分,功能实现、开发 步骤等,并能够对设计的过程进行总结、说明。 1.2.21.2.2 开发工具开发工具 本软件采用 microsoft visual c+ 6.0 进行开发,完成一个能够获得端口 信息的探测工具。 1.2.31.2.3 软件功能设计软件功能设计 (1)ping: 输入目标主机 ip,能够测试 ping 目标主机是否成功,判断目标主机是否 开机。 (2)scan: 输入起止端口号,当 ping 测试成功后进行扫描,得到目标主机的端口信息。 可以知道那些端口是开放的,哪些没有开放。 (3) 将结果信息输出到列表。 1.31.3 端口信息探测工具的设计原则端口信息探测工具的设计原则 (1)应用性: 设计本软件,应首先考虑能满足使用者的功能要求和实际应用的需要。 (2)易操作性: 软件以一个简洁的界面,简单的几个按钮就能够实现测定目标主机和端口的 扫描,以及信息列表等。方便与用户的操作。 (3)可靠性和稳定性: 在系统设备、网络设计、软件设计等各个方面要充分考虑可靠性和稳定性。 在设备方面,要保证软件、硬件的可靠性。必须考虑采用成熟的技术和产品。 在设备和程序设计的各个方面都尽量减少故障的发生。 (4)整体性: 系统的整体性,涉及到方方面面,对于端口扫描这样的软件必须对这些因 素统筹考虑,以构成一个有机的整体。 2 2 理论基础理论基础 2.1tcp2.1tcp:传输控制协议:传输控制协议 2.1.1tcp2.1.1tcp 概述概述 传输控制协议 tcp 是 tcp/ip 协议栈中的传输层协议,它通过序列确认以 及包重发机制,提供可靠的数据流发送和到应用程序的虚拟连接服务。与 ip 协议相结合, tcp 组成了因特网协议的核心。 由于大多数网络应用程序都在同一台机器上运行,计算机上必须能够确保 目的地机器上的软件程序能从源地址机器处获得数据包,以及源计算机能收到 正确的回复。这是通过使用 tcp 的“端口号”完成的。网络 ip 地址和端口号 结合成为唯一的标识 , 我们称之为“套接字”或“端点”。 tcp 在端点间建 立连接或虚拟电路进行可靠通信。 tcp 服务提供了数据流传输、可靠性、有效流控制、全双工操作和多路复 用技术等。 tcp 通过面向连接的、端到端的可靠数据报发送来保证可靠性。 tcp 在字 节上加上一个递进的确认序列号来告诉接收者发送者期望收到的下一个字节。 如果在规定时间内,没有收到关于这个包的确认响应,重新发送此包。 tcp 的 可靠机制允许设备处理丢失、延时、重复及读错的包。超时机制允许设备监测 丢失包并请求重发。 2.1.22.1.2 tcptcp 首首部部 tcp 向应用层提供一种面向连接的,可靠的字节流服务。每个 tcp 段都包 含源端和目的端的端口号,用来寻找发端和收端的应用进程。这两个值加上 ip 首部中的源 ip 地址和目的端的 ip 地址唯一确定一个 tcp 连接。 数据被封装在一个 ip 数据报中,tcp 首部的数据格式如图 1, 16 位源端口号 32 位序号 32 位确认序号 fin syn rst psh ack urg 保留 6位 4 位首 部长度 16 位窗口大小 16 位紧急指针16 位检验和 选项 数据 16 位目的端口号 图 1 tcp 首部 2.1.32.1.3 tcptcp 连接的建立连接的建立 tcp 是面向连接的协议。运输连接是用来传送 tcp 报文的。tcp 的运输连接 的建立和释放是每一次面向连接的通信中必不可少的过程。因此,tcp 的数据 传输过程就有三个阶段,即:连接建立、数据传送和连接释放。 在这三个过程中,tcp 首部的 6 位标志字段起到了非常重要的控制作用,下 面就是他们的代表的意义(均是置 1 有效): urg:和紧急指针配合使用,发送紧急数据; ack:确认号是否有效; psh:指示发送方和接收方将数据不做缓存,立刻发送或接收; rst:由于不可恢复的错误重置连接; syn:用于连接建立指示; fin:用于连接释放指示。 在连接建立阶段,首先需要解决的问题便是建立连接的延迟重复问题。 在复杂的网络拓扑环境下,重复分组有可能因为时延而被存储在子网中,并在 很久以后突然出现。这就使出现重复连接成为可能。为解决这一点,tcp 建立 连接就采用了三次握手的方式。如图 2: syn,ack,seq=y,ack=x+1 ack,seq=x+1,ack=y+1 确认 确认 连接请求 主机 a主机 b syn,seq=x 图 2 连接建立 在三次握手连接建立过程中,首先,客户端(图中主机 a)要向服务器端 (图中主机 b)发送连接请求报文段,其首部的同步比特 syn 应置为 1,同时选 择一个序号 x,表明在后面传送数据时的第一个数据字节的序号是 x。在图中一 个从 a 到 b 的箭头上标有“syn,seq=x”就是这个意思。服务器端在收到连接 请求报文后,如同意,则发回确认。在确认报文段中应将 syn 置为 1,确认号 应为 x+1,同时也为自己选择一个序号 y。最后,客户端在收到此报文后,还要 向 b 发出确认,其确认号为 y+1。 2.1.42.1.4 tcptcp 连接的终止连接的终止 在数据发送完毕之后,就将进入连接释放阶段。与建立连接不同的是通信 的双方都可以发出连接释放请求,并且不再发送数据(如图 3) 。假设主机 a 先 向对方发出连接释放请求。这时主机 a 要做的便是向主机 b 发送首部终止比特 fin 为 1 的报文,其序号 x 等于前面已传送过的数据的最后一个字节的序号加 1。紧接着,主机 b 在收到此请求后要发出确认,其序号为 x+1,同时通知高层 应用进程。这样从 a 到 b 的连接就释放了,连接处于半关闭(half-close)状 态,即主机 a 不能再向 b 发送数据,但主机 b 可以向 a 发送数据。之后,若主 机 b 也完成数据发送过程,便也将进入连接释放阶段以释放那另一半连接。这 时,主机 b 将向主机 a 发送连接释放请求报文,此报文的首部也将把 fin 比特 置 1,并且序号为 y 等于前面已传送过的数据的最后一个字节加+1,另外 还必 须重复上次已发送过的 ack=x+1。主机 a 必须对此发出确认,给出 ack=y+1。这 样才能把从 b 到 a 的反向连接释放掉。同时,主机 a 也要向应用进程报告。至 此,整个连接才全部释放掉。整个过程如图 3: 确认 应用进程释放连接 b 不再发送报文 a 不再发送报文 fin,seq=x ack,seq=y,ack=x+1 fin,ack,seq=y,ack=x+1 ack,seq=x+1,ack=y+1 主机 a主机 b 应用进程释 放连接 确认 通知主机应用进程 图 3 连接终止 2.22.2 端口扫描技术端口扫描技术 2.2.12.2.1 概述概述 端口扫描就是一种检查目标系统开放的 tcp 或者 udp 端口的信息收集技术。 他的基本方法是向目标机器的各个端口发送连接的请求,根据返回的响应,判 断在目标机器上是否开放了这个端口。 而当前比较有名的扫描工具有 superscan、nmap 等。 2.2.22.2.2 端口扫描原理端口扫描原理 tcp 由于其 connection oriented 的特性,为端口的扫描提供了基础。从 上一节介绍 tcp 时我们知道,tcp 建立连接时有三次握手。先是 client 端往 server 某端口发送请求连接的 sym 包,server 的该端口如果允许连接,会给 client 端发一个回包 ack,client 端收到 server 的 ack 包后再给 server 端发 一个 ack 包,tcp 连接正式建立。基于连接的建立过程,可以想到,假如要扫 描某一个 tcp 端口,可以往该端口发一个 sym 包,如果该端口处于打开状态, 我们就可以收到一个 ack,也就是说,如果收到 ack,就可以判断目标扫描出于 打开状态,否则,目标端口处于关闭状态。这就是 tcp 端口扫描的基本原理。 2.2.32.2.3 端口扫描常用方式介绍端口扫描常用方式介绍 (1)tcp syn 扫描: syn 扫描是最受欢迎的扫描方式。它执行得很快,在一个没有入侵防火墙 的快速网络上,每秒钟可以扫描数千个端口。 syn 扫描相对来说不张扬,不易 被注意到,因为它从来不完成 tcp 连接。它可以应对任何兼容的 tcp 协议栈。 它还可以明确可靠地区分 open(开放的), closed(关闭的),和 filtered(被过 滤的) 状态。 它常常被称为半开放扫描,因为它不打开一个完全的 tcp 连接。它发送一 个 syn 报文,就像真的要打开一个连接,然后等待响应。 syn/ack 表示端口在 监听 (开放),而 rst (复位)表示没有监听者。如果数次重发后仍没响应,该 端口就被标记为被过滤。如果收到 icmp 不可到达错误 ,该端口也被标记为被 过滤。 (2)tcp connect()扫描: 这是最基本的 tcp 扫描。操作系统提供的 connect()系统调用,用来与每 一个感兴趣的目标计算机的端口进行连接。如果端口处于侦听状态,那么 connect()就能成功.否则,这个端口是不能用的,即没有提供服务。这个技术 的一个最大的优点是,你不需要任何权限。系统中的任何用户都有权利使用这 个调用。另一个好处就是速度。如果对每个目标端口以线性的方式,使用单独 的 connect()调用,那么将会花费相当长的时间,你可以通过同时打开多个套 接字,从而加速扫描。使用非阻塞 i/o 允许你设置一个低的时间用尽周期,同 时观察多个套接字。但这种方法的缺点是很容易被发觉,并且被过滤掉。目标计 算机的 logs 文件会显示一连串的连接和连接出错的服务消息,并且能很快的使 它关闭。 (3) tcp fin()扫描: 有的时候有可能 syn 扫描都不够秘密。一些防火墙和包过滤器会对一些指 定的端口进行监视,有的程序能检测到这些扫描。相反,fin 数据包可能会没 有任何麻烦的通过。这种扫描方法的思想是关闭的端口会用适当的 rst 来回复 fin 数据包。另一方面,打开的端口会忽略对 fin 数据包的回复。这种方法和 系统的实现有一定的关系 。有的系统不管端口是否打开,都回复 rst,这样, 这种扫描方法就不适用了。并且这种方法在区分 unix 和 nt 时,是十分有用的。 对于这种扫描,如果收到一个 rst 报文,该端口被认为是 closed(关闭的),而 没有响应则意味着端口是 open|filtered(开放或者被过滤的)。如果收到 icmp 不可到达错误,该端口就被标记为被过滤的。扫描的关键优势是它能躲过一些 无状态防火墙和报文过滤路由器。另一个优势是这种扫描类型甚至比 syn 扫描 还要隐秘一些。 (4)分片扫描: 它本身并不是一种新的扫描方法,而是其他扫描技术的变种,特别是 syn 扫描和 fin 扫描。思想是,把 tcp 包分成很小的分片,从而让它们能够通过包 过滤防火墙。 注意,有些防火墙会丢弃太小的包。而有些服务程序在处理这样 的包的时候会出现异常,或者性能下降,或者出现错误。 (5)reverse-ident 扫描 ident 协议使得可以发现任何一个通过 tcp 连接的进程的所有者的用户名, 即使该进程并没有发起该连接只有在 tcp 全连接之后才有效。 (6)udp icmp 端口不可达扫描: 开放的 udp 端口并不需要送回 ack 包,而关闭的端口也不要求送回错误包, 所以利用 udp 包进行扫描非常困难, 有些协议栈实现的时候,对于关闭的 udp 端口,会送回一个 icmp port unreach 错误。它的 缺点是 速度慢,而且 udp 包和 icmp 包都不是可靠的 需要 root 权限,才能读取 icmp port unreach 消息。 2.32.3 winsockwinsock 套接字套接字 2.3.12.3.1 winsockwinsock windows sockets 是从 berkeley sockets 扩展而来的,其在继承 berkeley sockets 的基础上,又进行了新的扩充。这些扩充主要是提供了一些 异步函数,并增加了符合 windows 消息驱动特性的网络事件异步选择机制。 windows sockets 由两部分组成:开发组件和运行组件。 开发组件:windows sockets 实现文档、应用程序接口(api)引入库和一些 头文件。 运行组件:windows sockets 应用程序接口的动态链接库(winsock.dll)。 2.3.22.3.2 winsockwinsock 原理原理 在 tcp/ip 网络中两个进程间的相互作用的主机模式是客户机/服务器模式 (client/server model)。该模式的建立基于以下两点:1、非对等作用;2、通 信完全是异步的。客户机/服务器模式在操作过程中采取的是主动请示方式: 首先服务器方要先启动,并根据请示提供相应服务:(过程如下) (1)打开一通信通道并告知本地主机,它愿意在某一个公认地址上接收客户 请求。 (2)等待客户请求到达该端口。 (3)接收到重复服务请求,处理该请求并发送应答信号。 (4)返回第二步,等待另一客户请求。 (5)关闭服务器。 客户方: (1)打开一通信通道,并连接到服务器所在主机的特定端口。 (2)向服务器发送服务请求报文,等待并接收应答;继续提出请求。 (3)请求结束后关闭通信通道并终止。 2.3.32.3.3 套接字类型套接字类型 (1)socket_stream:双向可靠数据流,对应 tcp (2)socket_dgram:双向不可靠数据报,对应 udp (3)socket_raw:是低于传输层的低级协议或物理网络提供的套接字类型, 可以访问内部网络接口。例如接收和发送 icmp 报。 2.3.42.3.4 使用套接字流程使用套接字流程 socket 建立流式套接字返回 套接字号 s bind 套接字 s 与本地地址相 连 listen()通知 tcp 服务器准 备接收连接 accept()接收连接准备客户 端的连接 建立连接,accept()返回,得 到新套接字如 ns recv()/send()在套接字 ns 上 读写数据,数据交换 closesocket()关闭套接字 ns closesocket()关闭最初套接 s,连接结束 closesocket()关闭套接字 ns ,结束 tcp 对话 send()/recv()在套接字 ns 上 读写数据,数据交换 connect()将套接字 s 与远程 主机连接 socket()建立流式套接字号 s 服务端客户端 图 4 面向连接的套接字流程 socket()建立流式套接字,返 回套接字号 s bind()套接字 s 与本地地址 相连 recv()/send(),在套接字 ns 上读/写数据 closesocket()关闭套接字 ns socket()建立流式套接字, 返回套接字号 s bind()将套接字 s 与远程 主机相连 send()/recv(),在套接字上 写/读数据 closesocket()关闭套接字 s,结束 tcp 对话 服务端客户端 图 5 无连接协议套接字流程 3 3 总体设计总体设计 3.1 模块划分模块划分 3.1.13.1.1 功能模块图功能模块图 端口信息探测工具 pingscan 目标 ip 地址 开始端口 号 结果显示清空列表 list 结束端口 号 图 6 功能模块图 3.1.23.1.2 主要功能模块介绍主要功能模块介绍 本设计主要包含 ping 和 scan 两大功能。 (1)ping 模块 能够检测目标主机的状态,看目标主机是否可达。由用户输入一个目标主 机的 ip 地址,点击 ping 按钮后,能够进行测试,连接成功或不成功都回返回 信息到软件的列表框。 (2)scan 完成对指定 ip 主机的端口信息的扫描,能够测试哪些端口开放,哪些端口 关闭。并把结果输出到列表框。在 ping 测试完成后,这个模块方可使用。 3.23.2 设计实现流程图设计实现流程图 是 否 输入目标 ip 重新输入 ip ping清空列表 结果列表 开始和结束端口scan 是否通过 退出 图 7 设计实现流程图 4 4 端口信息探测工具的详细设计与实现端口信息探测工具的详细设计与实现 4.14.1 软件界面软件界面 本软件编译通过,界面如下图: 开始 图 8 界面 4.24.2 pingping 按钮实现按钮实现 4.2.1 ping 按钮实现流程图按钮实现流程图 图 9 ping 按钮实现流程 是 否 输入目标 ip 重新输入 ip 点击 ping 按钮 扫描按钮有效 是否通过测试 结束 开始 4.2.2 ping 按钮总体实现过程按钮总体实现过程 (1)调用 updatedate(true)函数,更新成员变量。 (2)然后用 getaddress()函数来获取输入的 ip 地址,并且判断输入的 ip 地址 是否合法,合法的话,把输入的 ip 地址转换成标准的 ip 地址格式,并存入字 符串 routeip 中。 (3) newping(),带入参数目标 ip 地址,跳跃数,往返时间,完成一个测试 连接。 (4)调用 getrttandhopcount()函数,是一个 win32api 标准函数,能够在 规定的时间内检查网络是否畅通。它包含四个参数,分别为:目标 ip 地址,到 目的地的跳跃数,最大跳数和到目的地的往返时间。如果返回 1,则说明网络 畅通,这时输出某某 ip 地址测试成功;如果返回 0,就说明网络不畅通。 (5) getdlgitem(idc_btn_scan)-enablewindow(true),使得扫描按钮 有效。如果前面某某 ip 地址测试不通过,扫描按钮不起效。 ping 按钮主要源程序如下: this-updatedata(true); dword dwip=0; m_editscanip.getaddress(dwip); if(dwip24) ia = inet_addr(routeip); rc = newping(ia,(ulong*) m_destip=routeip; if (rc = 1) cstring info; info.format(“ip 地址:%d.%d.%d.%d 连接测试通过!“, (dwip24) m_listrichedit.addstring(info); getdlgitem(idc_btn_scan)-enablewindow(true); else cstring info; info.format(“ip 地址:%d.%d.%d.%d 测试未通过!“, (dwip24) m_listrichedit.addstring(info); afxmessagebox(“输入的 ip 地址不存在“); getdlgitem(idc_btn_scan)-enablewindow(false); int newping(ipaddr ia, ulong *hops_count, ulong *rtt) boolean isok; isok = getrttandhopcount(ia, hops_count,128, rtt); if (isok = true) return 1; return 0; 4.3 scan 按钮实现按钮实现 4.3.1 scan 按钮实现流程图按钮实现流程图 图 10 scan 按钮实现流程 4.3.2 scan 按钮总体实现过程按钮总体实现过程 (1)依旧调用 updatedate(true)函数,更新成员变量。 (2)接着判断输入的断口值,输入端口范围是 0-65530,不符合或者开始端 口大于结束端口,都回弹出错误信息。 (3)如果符合标准,则开始调用 win32api 的标准创建线程函数 afxbeginthread(),创建一个线程。 (4)然后创建一个定时器 settimeout()。 (5)调用 afxsocketinit(),初始化 winsocket (6)初始化成功以后,调用 create 元函数,之后后会构造一个 socket 对象来 创建 windows socket ,然后 create 会自动调用 bind,把 socket 和指定的地 址绑定,然后 socket 就会提供 sock_stream 和 sock_gdream 两种模式。 本设计用的是基于 tcp 的 stream 模式。 (7)成功以后调用 connect(),将套接字 s 与目标主机建立连接。如果连接成 功,则在 list 中输出某某端口已开启。 (8)调用 killtimeout(),关闭连接,销毁记时器。 (9)delete sock (10)端口地址自加 1。 scan 按钮主要源程序如下: this-updatedata(true); if(m_editendport65530) 否 是 开始和结束端口 输入是否正 确 点击 scan 按钮 重新输入端口号 扫描端口 输出结果 m_editendport=65530; else if(m_editendport65530) m_editstartport=65530; else if(m_editstartportm_editendport) afxmessagebox(“开始端口大于结束端口,请重新输入扫描端口段!“); return ; this-updatedata(false); scanthread = afxbeginthread(portscanthreadproc, this); uint portscanthreadproc(lpvoid pparam) cportscanview *sview=(cportscanview *)pparam; dword beginport=sview-m_editstartport; dword endport=sview-m_editendport; cstring info; cstring routeip; routeip=sview-m_destip; ctimeoutsocket* sock=null; afxsocketinit(); while (1) sock = new ctimeoutsocket(); sock-settimeout(5000); if (!sock-create() return 1; if (sock-connect(routeip,beginport) info.format(“ip 地址:%s 端口%d 已开启!“,routeip,beginport); sview-m_listrichedit.addstring(info); else info.format(“ip 地址:%s 端口%d 未开启!“,routeip,beginport); sview-m_listrichedit.addstring(info); sock-killtimeout(); delete sock; sock=null; beginport+=1; if(beginportendport) return 0; bool ctimeoutsocket:settimeout(uint utimeout) m_ntimerid = settimer(null, 0, utimeout, null); return m_ntimerid; bool ctimeoutsocket:killtimeout() return killtimer(null, m_ntimerid); 5 5 软件测试软件测试 5.15.1 测试的目的和定义测试的目的和定义 5.1.15.1.1 测试的目的测试的目的 经过软件分折与设计后。就可以根据现有的设计在具体的环境中实现,生 成系统的源代码、可执行程序。然后需要对软件进行测试和排错,保证软件符 合预定的要求。获得一个无错的实现,调试的结果将确认所完成的软件可以真 正使用。最后,软件测试的任务是在真实的使用运行环境中配置,调试软件, 解决软件正式使用前,可能存在的任何问题。 5.1.25.1.2 测试的定义测试的定义 主要方法有审阅,检查。对软件进行静态测试。因为本软件是自己设计的, 自己参与了其全部的设计过程,对软件的逻辑结构,编程思想,代码编写都熟 悉。从 ping 按钮开始,逐步查看各功能模块的设计及完成功能的技巧和编程思 路,代码实现 5.25.2 端口信息探测工具测试计划端口信息探测工具测试计划 5.2.15.2.1 测试环境测试环境 一台计算机,在系统中安装 microsoft visual c+ 6.0. 计算机配置:奔腾 4 2.4g 256m 内存 操作系统:windows 2000/xp/2003 5.2.25.2.2 测试项目及说明测试项目及说明 (1)ping 模块测试 主要测试 ping 按钮完成的功能。在输入 ip 后,能不能将目标主机返回的 信息反映在 list 中。 (2)scan 模块测试 测试能不能对目标主机进行端口扫描。将获得的端口信息反映到 list 表中。 5.35.3 端口信息探测工具测试计划执行情况端口信息探测工具测试计划执行情况 5.3.15.3.1 pingping 模块测试结果模块测试结果 在软件的 ip 地址栏内输入需要扫描主机的 ip 地址,比如 192.168.1.231,输入想要扫描的起始端口和结束端口号,比如 130-140。如下 图: 图 11 输入端口号 点击 ping 按钮,ping 通会提示成功信息,失败会提示失败信息: 图 12 ping 测试成功 此时提示连接成功,并且扫描按钮有效。失败会提示连接测试未通过。 如果输入的端口号或 ip 有误会提示: 图 13 输入端口号错误 5.3.25.3.2 scanscan 模块测试结果模块测试结果 ping 测试成功以后,在开始端口和结束端口处输入端口号,比如 130- 140, 点击扫描按钮,结果如下: 图 14 扫描结果 在 list 表中会显示出目标 ip 的哪些端口是开放的,而哪些端口是关闭的。 点击清空列表按钮,清空列表信息。 5.45.4 端口信息探测工具需求测试结论端口信息探测工具需求测试结论 经过软件的测试,系统基本上达到需求定义阶段设计目标所提出的要求。 5.55.5 评价评价 软件基本达到设计要求,软件功能完整,用户界面良好,错误处理正确, 且能正确提示错误种类。 但是在测试中也发现软件的一些不足与缺陷,比如考虑不周全,没有起用 多线程等等一些缺陷,需要在软件进一步修改和维护时予以纠正。 总的来说,软件通过测试。 结结 论论 端口信息探测工具,从技术和实现两个方面,对 tcp 协议,端口扫描原理, 套接字原理进行了深入的分析和设计,并对开发思想和技术实现情况做了详细 描述。首先介绍了当前开发端口信息探测工具的意义,接着分析了 tcp 三次握 手建立连接的原理以及过程,以及端口扫描的主要原理和过程,套接字的原理。 选取了一个研究的主要问题怎样利用三次握手来进行端口扫描,然后就具体的 设计方面的内容做了一定介绍,给出了设计的实现方法并最后对本设计进行了 一些测试。 本项目已经完成端口探测工具的基本开发。其功能基本符合设计目标,能 够完成通过对目标端口进行扫描来获得端口信息的预期功能。 在本次设计中,由于自己此方面知识不够全面和时间上的问题,使得软件 还存在一些不足。比如没有打开多个线程。 本设计今后主要工作重点是完整实现,在打开多个线程方面,能够用这种 方法来加快扫描的速度。 参考文献参考文献 1 w.richard stevens(美).tcp/ip 详解m.北京:机械工业出版社,2005。 2 郑丽,董渊c+语言程序设计m.北京:清华大学出版社,2004。 3 张炯.windows 网络编程实用技术与实例分析m.北京:清华大学出版社,2002。 4 stanley,blippman barbara e,moo jose lajoie(美).c+primer 中文版m.北京: 人民邮电出版社,2006。 5 蒋爱军,李师贤,梅小勇.c+primer 习题解答m.北京:人民邮电出版社,2007。 6 贾斌.网络编程技巧与实例m.北京:人民邮电出版社,2004。 附附 录录 系统源代码: #include “stdafx.h“ #include “portscan.h“ #include “timeoutsocket.h“ #include “portscandoc.h“ #include “portscanview.h“ #include /winsock api 的头文件 #include “iphlpapi.h“ #ifdef _debug #define new debug_new #undef this_file static char this_file = _file_; #endif int newping(ipaddr ia, ulong *hops_count, ulong *rtt); /创建线程 / / cportscanview /scanthread callback /win32aip 标准函数,回调函数,由操作系统自己负责函数的调用 uint portscanthreadproc(lpvoid pparam) /lpvoid 定义为 far 类型,32 字节 指向未指明的类型 /不管代入的参数是否是个从 cwinthread 继承来的线程类还是一以标准 的线程函数地址及参数 /(uint threadproc(lpvoid pparam)的形式) ,都返回了一 cwinthread 指针方便了我们使用 cportscanview *sview=(cportscanview *)pparam; /设置视图类 指针 dword beginport=sview-m_editstartport; /得到编辑框 属性 dword endport=sview-m_editendport; /同上 cstring info; cstring routeip; routeip=sview-m_destip; /设置编辑框属 性 ctimeoutsocket* sock=null; /初始化一个测 试端口超时对象 afxsocketinit(); /afx 前缀的函数为应用程序框架函数,帮助我们生成应 用程序,他们是全局函数, /初始化 socket /可以在任何地方调用他们 /成功返回 1,bool 类型 /标准 win32api 初始化 windows socket while (1) sock = new ctimeoutsocket(); /创建一个新的类的对象, 赋给 sock。 sock-settimeout(5000); /设置连接超时 时间 if (!sock-create() /创建 socket 对象, 同时这个 socket 绑定到指定的 ip /他支持 2 中模式,一种是流模式,一种是数据报文 return 1; if (sock-connect(routeip,beginport) /如果能够建立 socket 连接, 同样是一种是流,一种数据包 info.format(“ip 地址:%s 端口%d 已开启!“,routeip,beginport); /如果端口打开。格式化输出 routeip,beginport 的值 sview-m_listrichedit.addstring(info); /把扫描到的 ip 地址绑定到 clistbox else /如果端口关闭 info.format(“ip 地址:%s 端口%d 未开启!“,routeip,beginport); sview-m_listrichedit.addstring(info); sock-killtimeout(); /关闭连接,销毁记 时器 delete sock; sock=null; beginport+=1; if(beginportendport) return 0; /ping 扫描实现 / cportscanview message handlers /在视图类中测试扫描按钮 void cportscanview:onbtnscan() / todo: add your control notification handler code here this-updatedata(true); /this 指针是一隐含的指针,指向对象本身, 代表了对象的地址 /初始化对话框里的数据,也可是使对话 框里的数据有效 if(m_editendport65530) /idc_edit_endport m_editendport=65530; else if(m_editendport65530) /测试端口的开始范围 m_editstartport=65530; else if(m_editstartportm_editendport) afxmessagebox(“开始端口大于结束端口,请重新输入扫描端口段!“); return ; this-updatedata(false); /已经初始化。ture 为重新得到 scanthread = afxbeginthread(portscanthreadproc, this); /传入线程函数 名和参数 void cportscanview:onbtnping() / todo: add your control notification handler code here this-updatedata(true); /操作成功非 0,如果参数为真,返回一个非 0 数值表示数据已经确认 bool 类型 /控件显示的值与控件相关联的数(成员 变量)的值不是同步的, /我们必须调用 updatedata();当我们输入了数据,就调用 updatedata(true)来更新成员变量; /updatedata(false) 将成员变量的值显示在屏幕上。cdialog 的 updatedata()更新所有的控件, /如果只想更新一个控件,可以调用控件类的 updatedata(). dword dwip=0; /宽字节类型,32bit 的无符号整 型或段地址的联合偏移量 m_editscanip.getaddress(dwip); /得到接收 ip 地址控件类的各个字 段,一共 4 个字段 /dwip 的值用来接收 ip 地址 if(dwip24) /把 ip 地址格式化到变量 routeip 中把每个字段右移 24 位并且把低 8 位和 ff 相与,以%d 格式格式化 ia = inet_addr(routeip); /inet_adde 是 winsocket 函数,转换一 个串类型到正确的 ip 地址类型 rc = newping(ia,(ulong*) /调 用 newping 完成一个测试连接 m_destip=routeip; if (rc = 1) /设置一个测试标志位 cstring info; info.format(“ip 地址:%d.%d.%d.%d 连接测试通过!“, /info ip 助手,将 netconfig 和 start 信息添加到 win32 (dwip24) /输出 ip 地址的信息记录到列表控件下来 m_listrichedit.addstring(info); /如果返回值大于等于 0,把测试 到的信息显示到 clistbox 中 getdlgitem(idc_btn_scan)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- Python爬虫大数据采集与挖掘-微课视频版-课件 第二版-6 Web信息提取与Python实现
- 《钢筋混凝土主体结构施工》课件-任务3人机料
- 步态周期下合并外侧盘状半月板的膝关节生物力学有限元分析
- 抗菌海洋微生物的分离筛选及次级代谢产物研究
- 2025至2030年冷冻黑芝麻汤圆项目投资价值分析报告
- 2025至2030年全自动血液细胞计数仪项目投资价值分析报告
- 2025年水位自动控制阀项目可行性研究报告
- 护理人员在职培训计划
- 移动营业员工作计划
- 大学生暑期社会实践个人总结
- 2025年滁州市城投交通控股有限公司招聘19人笔试参考题库附带答案详解
- 汽车美容师洗车方法实际操作试题及答案
- 盐城2025年江苏盐城建湖县部分医疗卫生事业单位校园招聘专业技术人员37人笔试历年参考题库附带答案详解
- 部门决算管理制度
- 第四代住宅白皮书-HZS
- 神经内科护理案例分析
- 2025年安徽省中考模拟英语试题(原卷版+解析版)
- 【初中语文】第11课《山地回忆》课件-2024-2025学年统编版语文七年级下册
- 衍纸简介课件
- 入团考试模拟100题及答案
- 2025陕西西安市长安城乡建设开发限公司招聘17人高频重点模拟试卷提升(共500题附带答案详解)
评论
0/150
提交评论