1、本科毕业论文(20 届)UDP 网段扫描器设计所在学院 专业班级 通信工程 学生姓名 学号 指导教师 职称 完成日期 年 月 - I -目 录摘要 .IIIAbstract.IV第 1 章 绪论 .11.1 研究背景 .11.2 网络扫描器概述 .11.2.1 安全漏洞的定义 .11.2.2 安全漏洞的分级 .21.2.3 网络安全扫描器 .31.3 本文研究内容 .5第 2 章 NetBIOS 及 UDP 协议介绍 .62.1 网段扫描器实现原理 .62.1.1UDP 与 TCP 简介 .62.1.2 UDP 与 TCP 的选择 .62.2 TCP 与 UDP 的区别 .72.3 TCP 与
2、 UDP 的效率比较 .8第 3 章 Winsock 开发原理 .93.1 套接字(Socket)的概念 .93.2 套接字的分类 .103.3 Winsoek 网络编程原理 .11第 4 章 UDP 网段扫描器的设计 .144.1CSOCKET 的类中 UDP 协议相关函数简介 .144.2 事件函数为线程创建函数 .154.3 网段扫描器设计 .164.3.1 启动扫描 .174.3.2 扫描线程 .184.3.3 获得扫描结果 .20总结 .22参考文献 .23- II -致 谢 .24- III -UDP 网段扫描器设计摘要随着计算机技术的发展和网络的不断普及, 网络应用程序的开发越来
3、越普遍, 因此进行网络应用程序的开发就显得尤为重要。本文首先在数据传输网络中,与 TCP、SCTP 等其它传输协议相比,UDP 协议在速度上有着一定的优势,但也存在着可靠性差的问题。结合 TCP、SCTP 和 UDP 各自的优势,IETF 提出了可靠 UDP(Reliable UDP,RUDP)草案,并在此基础上,提出了可靠 UDP 的实现方案。其次对 Windows 下 UDP 编程接口 Windows Socket 的相关知识进行了概述, 介绍了套接字的分类及面向连接的套接字编程原理, 分析了在 Windows 环境应用 Socket 实现网络通信的机制, 并阐述了如何基于 Windows
4、 Socket 创建面向连接的客户机/服务器(C/S) 网络应用程序。最后创建基于 Windows Socket 的网络应用程序时, 需要对服务器方和客户方都应该编写应用程序。结合 Visual C+ 程序开发环境,利用 WinSock的网络开发技术,采用 UDP 协议,实现网段扫描器的设计。关键字:UDP;Socket;网段;扫描器- IV -The Design of UDP Network Segment ScannerAbstractWith the development of computer technology and network, the increasing popul
5、arity of Internet applications development is becoming more common, so for the development of network applications are particularly important. This paper firstly in data transmission network, and other SCTP TCP, UDP protocol transmission protocols in speed compared to have certain advantages, but th
6、ere is also poor reliability problems. TCP, UDP SCTP and with their respective advantages and IETF proposes Reliable UDP (RUDP) draft is UDP, and based on this, advances the Reliable UDP scheme. Next to the Windows down UDP programming interface Windows Socket reviewed the relevant knowledge, introd
7、uces the classification of Socket and connection-oriented Socket programming principle, the paper used in Windows environment Socket realize network communication mechanism, and expounds how to Windows based Socket create connection-oriented client/server (C/S) network applications. Finally create W
8、indows based Socket web applications, need on the server side and the client should write applications. Combined with Visual c + + program development environment, use WinSock network development technology, using the UDP protocol, realize the design of network segment scanner. Keyword: UDP, Socket,
9、 nets section, scanner- 1 -第一章 绪论1.1 研究背景随着信息与通信技术迅速在多个领域取得突破性进展,Internet 将人们更紧密联系在一起, “地球村 ”的梦想已然成为了现实。互联网已经深入到人类社会的各个领域,成为人们日常生活所不可缺少的一部分。它正在改变着人们的生产方式、工作方式、生活方式和学习方式,推动了各行各业的发展。互联网如此迅速发展并广泛使用,主要得益于其所特有的丰富信息资源。人们只要进入网路世界便可以从浩如烟海的信息中查询到自己需要的部分,可以和远隔重洋的亲朋好友互通音讯,可以坐在家中接受全球各地医学专家的会诊,可以实现网上购物、网上营销。互联网的
10、迅速发展,给人们的日常生活带来了全新的感受,同时人类社会对信息网络的依赖程度已经越来越强,一个真正的互联网时代已经到来。然而,随着互联网的广泛普及越来越多不同背景和不同动机的参与者介入到互联网环境中,不法之徒试图不断利用各种手段伺机侵入他人网络系统。事实证明,随着电子商务和电子银行业务广泛使用,由于利益的驱使网络犯罪活动日趋猖獗,互联网正面临着其出现以来最大的威胁,网络安全已成为 Internet 上的焦点,它关系着 Internet 的进一步发展和普及,甚至关系着 Internet 的生存 7。网络安全问题已经成为互联网发展道路上所亟待解决的问题。1.2 网络扫描器概述1.2.1 安全漏洞的
11、定义漏洞是在硬件、软件、协议的具体实现或系统安全策略上存在的缺陷,从而可以使攻击者能够在未授权的情况下进行访问或破坏系统。具体举例来说,比如在 Intel Pentium 芯片中存在的逻辑错误,在 Sendmail 早期版本中的编程错误,在 NFS 协议中认证方式上的弱点,在 Unix 系统管理员设置匿名 Ftp 服务时配置不当的问题都可能被攻击者使用,威胁到系统的安全。因而这些都可以认为是系统中存在的安全漏洞。从广义上讲漏洞就是指一切导致威胁或破坏计算机系统安全(可靠性、可用性、保密性、可控性、不可抵赖性)的事物。包括人员,硬件,软件,程序,数据。计算机系统中存在的漏洞会随着用户的深入使用被
12、不断暴露出来。随着时间的推移,旧的漏洞会不断消失,新的漏洞会不断出现,安全漏洞也会长期存在。因此,对安全漏洞问- 2 -题的研究必须要进行动态实时跟踪,对于发现的漏洞必须及时处理。1.2.2 安全漏洞的分级系统安全漏洞的存在可以是某些黑客攻击者得到可趁之机,他们可以利用这些漏洞侵入他人计算机系统以达到其不可告人的目的。例如:他们可以利用某些漏洞在未授权情况下访问他人系统,并非法获取他人计算机上的资料。在对攻击者攻击行为分析的基础上,按漏洞对目标主机的危险程度可粗略的将其分为三级:A 级漏洞:允许恶意入侵者访问并可能会破坏整个目标系统的漏洞,如允许远程未授权用户访问的漏洞。A 级漏洞是威胁最大的
13、一种漏洞,大多数 A 级漏洞是由于较差的系统管理或配置有误造成的。几乎可以在任意类型的远程访问软件中找到这样的漏洞。如,FTP、Telnet、Sendmail 等一些网络程序常存在一些严重的 A 级漏洞。B 级漏洞:是允许本地用户提高访问权限,并可能允许其获得系统控制的漏洞。大多数的 B 级漏洞是由应用程序中的一些缺陷或代码错误引起的。例如,在程序调试过程中为了调试方便会设置一些特殊的访问入口,在某些情况下可以使测试人员不需要密码就能访问。如果当程序调试成功后,忘记了将这些访问入口删除,就会造成允许用户提高访问权限的漏洞。此外,因编程缺陷或程序设计语言的问题造成的缓冲区溢出问题也是一类典型的
14、B 级安全漏洞。编程时,程序员会设置一些缓冲区,但是如果程序员没有对这些缓冲区做适当的检查,判断它们是否足够大,结果就可能造成缓冲区溢出。当缓冲区溢出时,过剩的信息会覆盖的是计算机内存中的内容。那些能够被程序调用的子程序的列表信息以及传递给子程序的信息、参数都有可能丢失。这意味着程序不能得到足够的信息从子程序返回。入侵者会利用精心编写的入侵代码使缓冲区溢出,然后告诉程序依据他们预设的方法处理缓冲区并且执行,从而使整个运行程序处于他们的控制之中 5。C 级漏洞:是任何允许用户中断、降低或阻碍系统操作的漏洞,例如拒绝服务漏洞。最典型的一种拒绝服务攻击是 SYNFLOOD,即入侵者将大量的连接请求发
15、往目标服务器,目标主机不得不处理这些“半开” 的 SYN 请求,然而并不能得到 ACK 回答,很快服务器就会因为内存资源枯竭而挂起,任何用户都不能再从服务器上获得服务。综上所述,对目标主机危害最严重的是 A 级漏洞,其次是 B 级漏洞,而 C 级- 3 -漏洞是对系统正常工作进行干扰。1.2.3 网络安全扫描器从扫描过程来看,网络安全扫描工具大体上可分为网络 ping 扫射,端口扫描,弱点扫描几种类型。 网络 ping 扫射PING (Packet Internet Grope),因特网包探索器,用于测试网络连接量的程序。PING 最常用的,就是利用 ICMP 协议,也是最简单的探测手段,用来
16、判断目标是否活动。实际上 Ping 是向目标发送一个要求回显(Type = 8)的 ICMP 数据报,当主机得到请求后,再返回一个回显(Type = 0)数据报。而且 Ping 程序一般是直接实现在系统内核中的,而不是一个用户进程。Ping 是最基本的探测手段,Ping Sweep(Ping 扫射)就是对一个网段进行大范围的 Ping,由此确定这个网段的网络运作情况,比如著名的 fping 工具就是进行 Ping 扫射的。Ping 是 Windows 系列自带的一个可执行命令。利用它可以检查网络是否能够连通,用好它可以很好地帮助我们分析判定网络故障。应用格式:Ping IP 地址。该命令还可以
17、加许多参数使用,具体是键入 Ping 按回车即可看到详细说明。 ping 指的是端对端连通,通常用来作为可用性的检查 10。 端口扫描真正的扫描器是 TCP 端口扫描器,这种程序可以选通 TCP/IP 端口和服务(比如,Telnet 或 FTP) ,并记录目标的回答。通过这种方法,可以搜集到关于目标主机的有用信息(比如,一个匿名用户是否可以登录等等) 。而其他所谓的扫描器仅仅是 UNIX 网络应用程序,这些程序一般用于观察某一服务是否正在一台远程机器上正常工作,它们不是真正的扫描器,但也可以用于收集目标主机的信息(UNIX 平台上通用的 rusers 和 host 命令就是这类程序的很好的例子
18、) 。一个端口就是一个潜在的通信通道,也就是一个入侵通道。对目标计算机进行端口扫描,能得到许多有用的信息,从而发现系统的安全漏洞。它使系统用户了解系统目前向外界提供了哪些服务,从而为系统用户管理网络提供了一种手段 8。端口扫描技术原理端口扫描向目标主机的 TCP/IP 服务端口发送探测数据包,并记录目标主机的响应。通过分析响应来判断服务端口是打开还是关闭,就可以得知端口提供的服务或信- 4 -息。端口扫描也可以通过捕获本地主机或服务器的流入流出 IP 数据包来监视本地主机的运行情况,它仅能对接收到的数据进行分析,帮助我们发现目标主机的某些内在的弱点。半连接(SYN)扫描SYN Flood 是当
19、前最流行的 DoS(拒绝服务攻击) 与 DDoS(分布式拒绝服务攻击)的方式之一,它是利用 TCP 协议缺陷,发送大量伪造的 TCP 连接请求,从而使得被攻击方资源耗尽(CPU 满负荷或内存不足)的攻击方式,最终导致系统或服务器宕机。在讨论 SYN Flood 原理前,我们需要从 TCP 连接建立的过程开始说起:TCP 与 UDP 不同,它是基于连接的,为了在服务端和客户端之间传送 TCP 数据,必须先建立一个虚拟电路,也就是 TCP 连接。也就是我们经常听说的 TCP 协议中的三次握手(Three-way Handshake) ,建立 TCP 连接的标准过程如下:首先,客户端发送一个包含 S
20、YN 标志的 TCP 报文,SYN 即同步(Synchronize ) ,同步报文会指明客户端使用的端口以及 TCP 连接的初始序号;其次,服务器在收到客户端的 SYN 报文后,将返回一个 SYN+ACK(即确认Acknowledgement)的报文,表示客户端的请求被接受,同时 TCP 初始序号自动加一。最后,客户端也返回一个确认报文 ACK 给服务器端,同样 TCP 序列号被加一,到此一个 TCP 连接完成。SYN Flood 攻击正是利用了 TCP 连接的三次握手 14,假设一个用户向服务器发送了 SYN 报文后突然死机或掉线,那么服务器在发出 SYN+ACK 应答报文后是无法收到客户端
21、的 ACK 报文的(第三次握手无法完成 ),这种情况下服务器端一般会重试(再次发送 SYN+ACK 给客户端)并等待一段时间后丢弃这个未完成的连接,这段时间的长度我们称为 SYN Timeout,一般来说这个时间是分钟的数量级(大约为 30 秒-2 分钟) ;一个用户出现异常导致服务器的一个线程等待 1 分钟并不会对服务器端造成什么大的影响,但如果有大量的等待丢失的情况发生,服务器端将为了维护一个非常大的半连接请求而消耗非常多的资源。我们可以想象大量的保存并遍历也会消耗非常多的 CPU 时间和内存,再加上服务器端不断对列表中的 IP 进行 SYN+ACK 的重试,服务器的负载将会变得非常巨大。
22、如果服务器的 TCP/IP 栈不够强大,最后的结果往往是堆栈溢出崩溃。相对于攻击数据流,正常的用户请求就显得十分渺小,服务器疲- 5 -于处理攻击者伪造的 TCP 连接请求而无暇理睬客户的正常请求,此时从正常客户会表现为打开页面缓慢或服务器无响应,这种情况就是我们常说的服务器端 SYN Flood 攻击(SYN 洪水攻击)。这种技术通常认为是 “半开放”扫描,这是因为扫描程序不必要打开一个完全的 TCP 连接。扫描程序发送的是一个 SYN 数据包,好像准备打开一个实际的连接并等待反应一样。一个 SYN|ACK 的返回信息表示端口处于侦听状态。一个 RST 返回,表示端口没有处于侦听态。如果收到
23、一个 SYN|ACK,则扫描程序必须再发送一个 RST 信号,来关闭这个连接过程。这种扫描技术的优点在于一般不会在目标计算机上留下记录。但这种方法的一个缺点是,必须要有 root 权限才能建立自己的 SYN 数据包。1.3 本文研究内容本文首先在数据传输网络中,与 TCP、SCTP 等其它传输协议相比,UDP 协议在速度上有着一定的优势,但也存在着可靠性差的问题。结合 TCP、SCTP 和 UDP 各自的优势,IETF 提出了可靠 UDP(Reliable UDP,RUDP )草案,并在此基础上,提出了可靠 UDP 的实现方案。其次对 Windows 下 UDP 编程接口 Windows Socket 的相关知识进行了概述,介绍了套接字的分类及面向连接的套接字编程原理,分析了在 Windows 环境应用 Socket 实现网络通信的机制, 并阐述了如何基于 Windows Socket 创建面向连接的客户机/服务器(C/S) 网络应用程序。最后创建基于 Windows Socket 的网络应用程序时, 需要对服务器方和客户方都应该编写应用程序。结合 Visual C+ 程序开发环境,利用 WinSock 的网络开发技术,采用 UDP 协议,实现网段扫描器的设计。