计算机网络课程设计-简单点的端口扫描器_第1页
计算机网络课程设计-简单点的端口扫描器_第2页
计算机网络课程设计-简单点的端口扫描器_第3页
计算机网络课程设计-简单点的端口扫描器_第4页
计算机网络课程设计-简单点的端口扫描器_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1/21课程设计报告2014—2015学年第一学期课程名称计算机网络设计题目简单点的端口扫描器目录一、概述 31.1课程设计的目的 31.2课程设计的要求 3二、背景知识 32.1网络分层结构 32.2报文结构 62.2.1IP数据包结构 62.2.2TCP数据包结构 82.2.3UDP数据包结构 9三、程序执行环境 10四、编译环境 10五、运行方式 10六、测试结果截图 10七、主要流程的说明 16八、代码中核心算法的设计 21九、课程设计心得、总结 26参考资料: 26一概述1.1课程设计的目的扫描器是网络信息收集的一种方法,从功能上可分为漏洞扫描器和端口扫描器。通过此次课程设计,能够掌握漏洞、端口的基础知识,掌握扫描器的基本原理并设计实现端口扫描和漏洞扫描程序。1.2课程设计要求本课程设计的目标是设计并实现一个网络扫描器,它通过与目标主机TCP/IP端口建立连接并请求某些服务,记录目标主机的应答,分析目标主机相关信息,从而发现目标主机某些内在的安全弱点。扫描器通常分两类:漏洞扫描器和端口扫描器。端口扫描器用来扫描目标机开放的服务端口以及端口相关信息。漏洞扫描器检查目标中可能包含的大量已知的漏洞,如果发现潜在的漏洞可能性,就报告给扫描者。网络漏洞端口扫描器对目标系统进行检测时,首先探测目标系统的存活主机,对存活主机进行端口扫描,确定系统开放的端口,同时根据协议指纹技术识别出主机的操作系统类型。然后扫描器对开放的端口进行网络服务类型的识别,确定其提供的网络服务。漏洞扫描器根据目标系统的操作系统平台和提供的网络服务,调用漏洞资料库中已知的各种漏洞进行逐一检测,通过对探测响应数据包的分析判断是否存在漏洞。在分析总结目前现有的扫描软件,在掌握扫描器的原理基础上,首先设计、实现一种端口扫描程序,存储扫描结果。在此基础上,有余力的同学对已经开放的重要端口有具体漏洞分析检测。程序具体要求实现以下任一程序:高效端口扫描器设计与实现:参照常见端口扫描器,在局域网内,能对所有计算机进行常用端口的高速扫描,给出扫描结果。另外根据配置不同的网段,实现正对校园网络的基于网段的高速扫描。高效的漏洞扫描器的设计与实现:设计网络漏洞扫描仪的结构,建立常见的漏洞库,并基于该漏洞库,实现高效的基于网段的漏洞扫描器。主机脆弱性分析系统:将漏洞和端口扫描结合起来,实现针对主机的脆弱性分析系统。二背景知识2.1网络分层结构用户想要传送的数据,通过网络分层结构,各个层次协议头的封装,最终传入到网络中,接收端接收到的数据包,包含了几个层的协议头,了解各个协议的报文结构,然后进行解析,就可以得到用户想要的各种网络传输的信息。举例进行说明,用户传输字符串:TestData,在运输层使用Tcp协议,在网络层使用IP协议,链路层使用Ethernet进行封装;则最终传入到网络中的数据包的结构如下:Ethernet报文IP协议报文格式TCP报文结构传输数据(TestData)表一数据包格式2.2报文结构2.2.1IP数据包结构图一IP数据包结构(1)版本占4位,指IP协议的版本。通信双方使用的IP协议版本必须一致。目前广泛使用的IP协议版本号为4(即IPv4)。(2)首部长度占4位,可表示的最大十进制数值是15。请注意,这个字段所表示数的单位是32位字长(1个32位字长是4字节),因此,当IP的首部长度为1111时(即十进制的15),首部长度就达到60字节。当IP分组的首部长度不是4字节的整数倍时,必须利用最后的填充字段加以填充。因此数据部分永远在4字节的整数倍开始,这样在实现IP协议时较为方便。首部长度限制为60字节的缺点是有时可能不够用。但这样做是希望用户尽量减少开销。最常用的首部长度就是20字节(即首部长度为0101),这时不使用任何选项。(3)区分服务占8位,用来获得更好的服务。这个字段在旧标准中叫做服务类型,但实际上一直没有被使用过。1998年IETF把这个字段改名为区分服务DS(DifferentiatedServices)。只有在使用区分服务时,这个字段才起作用。(4)总长度总长度指首部和数据之和的长度,单位为字节。总长度字段为16位,因此数据报的最大长度为216-1=65535字节。(5)标识(identification)占16位。IP软件在存储器中维持一个计数器,每产生一个数据报,计数器就加1,并将此值赋给标识字段。但这个“标识”并不是序号,因为IP是无连接服务,数据报不存在按序接收的问题。当数据报由于长度超过网络的MTU而必须分片时,这个标识字段的值就被复制到所有的数据报的标识字段中。相同的标识字段的值使分片后的各数据报片最后能正确地重装成为原来的数据报。(6)标志(flag)占3位,但目前只有2位有意义。●标志字段中的最低位记为MF(MoreFragment)。MF=1即表示后面“还有分片”的数据报。MF=0表示这已是若干数据报片中的最后一个。●标志字段中间的一位记为DF(Don’tFragment),意思是“不能分片”。只有当DF=0时才允许分片。(7)片偏移占13位。片偏移指出:较长的分组在分片后,某片在原分组中的相对位置。也就是说,相对用户数据字段的起点,该片从何处开始。片偏移以8个字节为偏移单位。这就是说,每个分片的长度一定是8字节(64位)的整数倍。(8)生存时间占8位,生存时间字段常用的的英文缩写是TTL(TimeToLive),表明是数据报在网络中的寿命。由发出数据报的源点设置这个字段。其目的是防止无法交付的数据报无限制地在因特网中兜圈子,因而白白消耗网络资源。最初的设计是以秒作为TTL的单位。每经过一个路由器时,就把TTL减去数据报在路由器消耗掉的一段时间。若数据报在路由器消耗的时间小于1秒,就把TTL值减1。当TTL值为0时,就丢弃这个数据报。TTL通常是32或者64,scapy中默认是64(9)协议占8位,协议字段指出此数据报携带的数据是使用何种协议,以便使目的主机的IP层知道应将数据部分上交给哪个处理过程。(在scapy中,下层的这个protocol一般可以从上曾继承而来,自动填充,我们一般可以省略不填此项)(10)首部检验和占16位。这个字段只检验数据报的首部,但不包括数据部分。这是因为数据报每经过一个路由器,路由器都要重新计算一下首部检验和(一些字段,如生存时间、标志、片偏移等都可能发生变化)。不检验数据部分可减少计算的工作量。(11)源地址占32位。(12)目的地址占32位。2.2.2TCP数据包结构图二TCP数据包结构源端口和目的端口字段——各占2字节。端口是传输层与应用层的服务接口。传输层的复用和分用功能都要通过端口才能实现。序号字段——占4字节。TCP连接中传送的数据流中的每一个字节都编上一个序号。序号字段的值则指的是本报文段所发送的数据的第一个字节的序号。确认号字段——占4字节,是期望收到对方的下一个报文段的数据的第一个字节的序号。数据偏移——占4bit,它指出TCP报文段的数据起始处距离CP报文段的起始处有多远。“数据偏移”的单位不是字节而是32bit字(4字节为计算单位)。保留字段——占6bit,保留为今后使用,但目前应置为0。紧急比特URG——当URG=1时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)。确认比特ACK——只有当ACK=1时确认号字段才有效。当ACK=0时,确认号无效。复位比特RST(Reset)——当RST=1时,表明TCP连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接。同步比特SYN——同步比特SYN置为1,就表示这是一个连接请求或连接接受报文。终止比特FIN(FINal)——用来释放一个连接。当FIN=1时,表明此报文段的发送端的数据已发送完毕,并要求释放运输连接。窗口字段——占2字节。窗口字段用来控制对方发送的数据量,单位为字节。TCP连接的一端根据设置的缓存空间大小确定自己的接收窗口大小,然后通知对方以确定对方的发送窗口的上限。检验和——占2字节。检验和字段检验的范围包括首部和数据这两部分。在计算检验和时,要在TCP报文段的前面加上12字节的伪首部。紧急指针字段——占16bit。紧急指针指出在本报文段中的紧急数据的最后一个字节的序号。选项字段——长度可变。TCP首部可以有多达40字节的可选信息,用于把附加信息传递给终点,或用来对齐其它选项。填充字段——这是为了使整个首部长度是4字节的整数倍。2.2.3UDP数据包结构图三UDP数据包结构UDP数据报格式有首部和数据两个部分。首部很简单,共8字节。包括:◆源端口(SourcePort):2字节,源端口号。◆目的端口(DestinationPort):2字节,目的端口号。◆长度(Length):2字节,UDP用户数据报的总长度,以字节为单位。◆检验和(Checksum):2字节,用于校验UDP数据报的数字段和包含UDP数据报首部的“伪首部”。其校验方法同IP分组首部中的首部校验和。伪首部,又称为伪包头(PseudoHeader):是指在TCP的分段或UDP的数据报格式中,在数据报首部前面增加源IP地址、目的IP地址、IP分组的协议字段、TCP或UDP数据报的总长度等共12字节,所构成的扩展首部结构。此伪首部是一个临时的结构,它既不向上也不向下传递,仅仅只是为了保证可以校验套接字的正确性。三程序执行环境操作系统:WindowsXP四编译环境1.集成编译环境:VC6.02.编程语言:C++五运行方式MFC对话框程序六测试结果截图6.1错误处理1)输入端口范围1-65536图四端口范围错误处理2)端口输入不是数字,当鼠标焦点离开端口输入框时,程序报出警告,重新设置为默认端口。图五端口输入为字符6.2TCPConnect扫描本机连接的是路由器,路由器地址为10.0.0.1,本机IP为10.0.0.4,另有一台主机IP为10.0.0.2。图六TCPConnect扫描在实验中,TCPConnect扫描有以下的问题。无论扫描主机是否存在80和110端口都会显示Open状态,如图,10.0.0.3主机并不存在,但是80和110端口都会显示Open状态。由于本机配置有限,此程序连续扫描多个IP,每个IP扫描1024个端口时间较长,因此本机值扫描单个IP地址。6.3TCPSYN扫描扫描实验室中的主机192.168.1.141。结果如下:图七TCPSYN扫描6.4TCPFIN扫描扫描实验室中的主机192.168.1.141。结果如下:图八TCPFIN扫描对于Windows系统,无论端口是否开放,主机都会直接返回RST数据包,无法对端口状态进行判断。6.5TCPACK扫描扫描实验室中的主机192.168.1.141。结果如下: 图九TCPACK扫描ACK扫描技术多用来探测防火墙类型,如果主机反馈一个TCPRST数据报来,那么这个主机是存在的。因此从截图看来FIN和ACK扫描结果恰好相反。6.6TCPNULL扫描扫描实验室中的主机192.168.1.141。结果如下: 图十TCPNULL扫描NULL扫描中主机对于关闭的端口返回RST标志。6.7TCPXMAS扫描扫描实验室中的主机192.168.1.141。结果如下:图十一TCPXMAS扫描XMAS扫描时向目标端口发送一个含有FIN、URG、PUSH标志的分组。关闭的端口返回RST,它和FIN的扫描结果大致相同。6.8UDP扫描扫描实验室中的主机192.168.1.141。结果如下:图十二UDP扫描扫描本机IP192.168.1.135。结果如下: 图十三UDP扫描七主要流程的说明主程序流程:TCPConnect扫描程序流程:TCPNULL/ACK/FIN/XMAS等扫描程序流程:UDP扫描程序流程:八代码中核心算法的设计解释8.1数据结构#pragmapack(1)/************************************************************************//*以太网帧头部/************************************************************************/structEthernetHead{ unsignedcharbDestMac[6]; //目的MAC unsignedcharbSourceMac[6]; //源MAC unsignedshortusEthernetType; //类型};/************************************************************************//*IP头部/************************************************************************/structIPHead{unsignedcharucVersionAndHeadLength; //版本4位+首部长度4位unsignedcharucTos; //服务类型unsignedshortusTotalLength; //总长度unsignedshortusIdentification; //标识unsignedshortusFlagsAndFragmentOffset; //标志3位+分片偏移13位unsignedcharucTtl; //生存时间unsignedcharucProtocol; //协议unsignedshortusCrc; //首部校验和unsignedlongdwSourceAddr; //源IP地址unsignedlongdwDestAddr; //目的IP地址};/************************************************************************//*TCP头部/************************************************************************/structTCPHead{ USHORTusSourcePort; //16位源端口 USHORTusDestPort; //16位目的端口 ULONGdwSeq; //序列号 ULONGdwAck; //确认号 UCHARucLength; //4位首部长度/4位保留字 UCHARucFlag; //6位标志位 USHORTusWindow; //16位窗口大小 USHORTusCrc; //16位校验和 USHORTusUrgent; //16位紧急数据偏移量 UINTunMssOpt; USHORTusNopOpt; USHORTusSackOpt;};/************************************************************************//*UDP头部/************************************************************************/structIPPacket{ EthernetHeadtheEthHead; IPHeadtheIpHead;};/************************************************************************//*TCP包/************************************************************************/structTCPPacket IPPackettheIpPacket; TCPHeadtheTcpHead;};/************************************************************************//*TCP伪头部/*伪头部拼合在协议头和数据部分前面,进行统一的校验和计算/************************************************************************/structTCPFakeHeader{DWORDdwSourceAddr; //源地址DWORDdwDestAddr; //目的地址BYTEbZero; //置空BYTEbProtocolType; //协议类型USHORTbTcpLength; //TCP长度};#pragmapack()以上数据结构中,值得注意的是伪头部。TCP和UDP报头校验和的计算方式并非单纯计算协议头部或数据部分的网际校验和,而是单独构造一个伪头部,并将伪头部拼合在协议头和数据部分前面,进行统一的校验和计算,得出最终校验和结果。所以在程序中,需要定义伪头部,并调用TcpCheckSum()进行数据拼接和校验和计算。/************************************************************************//*参数: constchar*pTcpData待计算字符串theTcpHead;/* constchar*pPshData待计算字符串/* UINTnTcpCounttheTcpHead字符串大小/*返回值:USHORT计算得到的校验值结果/*函数功能:计算校验值/******************

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论