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

下载本文档

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

文档简介

课程设计报告2014—2015学年第一学期课程名称计算机网络设计题目简单的端口扫描器目录7161一.设计目的 327800二.设计要求 318755三.端口扫描器的研究 3111623.1TCP协议介绍 3122233.2UDP协议介绍 395393.3SOCKET介绍 4298423.4常见端口介绍 556353.5端口扫描器的功能简介 5263073.6常用端口扫描技术 627579四.设计实现 7296601.设计环境 7246532.程序流程图 8283373.主要算法 9250364.主要数据结构及主要函数说明 118528五.运行结果 12320551.扫描本地主机端口 12111002.扫描外部主机端口 1226580六.参考资料 13一.设计目的理解客户机-服务器与端口扫描的工作原理,实现对目标主机端口扫描的功能,即发现目标主机开启的端口信息。加深对TCP/IP的理解,熟悉socket编程。二.设计要求Windows环境下,程序在单机上运行;使用端口扫描对一台主机进行扫描,并显示出结果;对一个网段进行IP扫描,显示出结果;提供友好的用户界面。端口扫描器的研究3.1TCP协议介绍提到端口扫描技术就不可不提及TCP协议了,作为互联网的核心协议,TCP协议的重要性是人人皆知,端口扫描主要是建立在TCP协议基础上的一门技术。TCP协议是一种面向连接的,可靠的传输协议。一次正常的TCP传输需要通过在客户和服务器之间建立特定的虚电路连接来完成,这个过程通常被称为“三次握手”。TCP通过数据分段中的序列号保证所有的传输数据可以在远端按照正常的次序重组,而通过确认保证数据传输的完整性。三次握手过程:客户端发送一个TCP包(SYN请求)给服务端,其中标记SYN(同步序号)要打开。SYN请求指明了客户端希望连接的服务器端口号和客户端的ISN。服务器端发回应答,包含自己的SYN信息ISN和对客户端的SYN应答,应答时返回下一个希望得到的字节序号。客户端从对S服务器端来的SYN进行应答,数据发行开始。3.2UDP协议介绍UDP,用户数据报协议。UDP为应用程序提供了一种方法来发送经过封装的IP数据报,而且不必建立连接就可以发送这些IP数据报。UDP传输的数据段是由8个字节的头和净荷域构成的。两个端口分别被用来标示出源机器和目标机器内部的端点。当一个UDP分组到来的时候,它的净荷部分被递交给与目标端口相关联的那个进程。当目标端口必须将一个应答送会给源端口的时候,源端口是必须的。发送应答的进程只要将进来的数据段中的源端口域复制到输出的数据段中的目标端口域,就可以指定在发送机器上有哪个进程来接受应答。UDP的长度包含了8字节的头和数据部分。UDP校验和是可选的,如果不计算的话,则在该域中存放0.如果真正计算结果试的话,则该域中存放的全是1,除非数据的质量并不重要,否则就不应该将校验和的功能关闭。另外值得明确提出来的是UDP没有做到的一些事情。UDP并不考虑流控制,在收到一个坏的数据段之后它也不重传。所有这些工作都留给用户的进程。UDP所做的事情是提供一个接口,并且在接口中增加解复用的特性。它利用端口的概念将数据段解复用到多个进程中,这就是他所做的全部工作。3.3SOCKET介绍所谓socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过"套接字"向网络发出请求或者应答网络请求。Socket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序。要学Internet上的TCP/IP网络编程,必须理解Socket接口。Socket接口设计者最先是将接口放在Unix操作系统里面的。如果了解Unix系统的输入和输出的话,就很容易了解Socket了。网络的Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符。Socket也具有一个类似于打开文件的函数调用Socket(),该函数返回一个整型的Socket描述符,随后的连接建立、数据传输等操作都是通过该Socket实现的。常用的Socket类型有两种:流式Socket(SOCK_STREAM)和数据报式Socket(SOCK_DGRAM)。流式是一种面向连接的Socket,针对于面向连接的TCP服务应用;数据报式Socket是一种无连接的Socket,对应于无连接的UDP服务应用。最重要的是,socket是面向客户/服务器模型而设计的,针对客户和服务器程序提供不同的socket系统调用。客户随机申请一个socket(相当于一个想打电话的人可以在任何一台入网电话上拨号呼叫),系统为之分配一个socket号;服务器拥有全局公认的socket,任何客户都可以向它发出连接请求和信息请求(相当于一个被呼叫的电话拥有一个呼叫方知道的电话号码)。socket利用客户/服务器模式巧妙地解决了进程之间建立通信连接的问题。服务器socket半相关为全局所公认非常重要。不妨考虑一下,两个完全随机的用户进程之间如何建立通信?假如通信双方没有任何一方的socket固定,就好比打电话的双方彼此不知道对方的电话号码,要通话是不可能的。3.4常见端口介绍端口:21服务:FTP

说明:FTP服务器所开放的端口,用于上传、下载。最常见的攻击者用于寻找打开anonymous的FTP服务器的方法。这些服务器带有可读写的目录。木马DolyTrojan、Fore、InvisibleFTP、WebEx、WinCrash和BladeRunner所开放的端口。

端口:23服务:Telnet

说明:远程登录,入侵者在搜索远程登录UNIX的服务。大多数情况下扫描这一端口是为了找到机器运行的*作系统。还有使用其他技术,入侵者也会找到密码。木马TinyTelnetServer就开放这个端口端口:25服务:SMTP

说明:SMTP服务器所开放的端口,用于发送邮件。入侵者寻找SMTP服务器是为了传递他们的SPAM。入侵者的帐户被关闭,他们需要连接到高带宽的E-MAIL服务器上,将简单的信息传递到不同的地址。木马Antigen、EmailPasswordSender、HaebuCoceda、ShtrilitzStealth、WinPC、WinSpy都开放这个端口端口:80服务:HTTP

说明:用于网页浏览。木马Executor开放此端口。3.5端口扫描器的功能简介 服务器上所开放的端口就是潜在的通信通道,也就是一个入侵通道。对目标计算机进行端口扫描,能得到许多有用的信息,进行端口扫描的方法很多,可以是手工进行扫描、也可以用端口扫描软件进行。

扫描器通过选用远程TCP/IP不同的端口的服务,并记录目标给予的回答,通过这种方法可以搜集到很多关于目标主机的各种有用的信息,例如远程系统是否支持匿名登陆、是否存在可写的FTP目录、是否开放TELNET服务和HTTPD服务等。3.6常用端口扫描技术1、TCPconnect()扫描:这是最基本的TCP扫描,操作系统提供的connect()系统调用可以用来与每一个感兴趣的目标计算机的端口进行连接。如果端口处于侦听状态,那么connect()就能成功。否则,这个端口是不能用的,即没有提供服务。这个技术的一个最大的优点是,你不需要任何权限。系统中的任何用户都有权利使用这个调用。另一个好处就是速度,如果对每个目标端口以线性的方式,使用单独的connect()调用,那么将会花费相当长的时间,使用者可以通过同时打开多个套接字来加速扫描。使用非阻塞I/O允许你设置一个低的时间用尽周期,同时观察多个套接字。但这种方法的缺点是很容易被察觉,并且被防火墙将扫描信息包过滤掉。目标计算机的logs文件会显示一连串的连接和连接出错消息,并且能很快使它关闭。

2、TCPSYN扫描:

这种技术通常认为是“半开放”扫描,这是因为扫描程序不必要打开一个完全的TCP连接。扫描程序发送的是一个SYN数据包,好象准备打开一个实际的连接并等待反应一样(参考TCP的三次握手建立一个TCP连接的过程)。一个SYN|ACK的返回信息表示端口处于侦听状态:返回RST表示端口没有处于侦听态。如果收到一个SYN|ACK,则扫描程序必须再发送一个RST信号,来关闭这个连接过程。这种扫描技术的优点在于一般不会在目标计算机上留下记录,但这种方法的缺点是必须要有root权限才能建立自己的SYN数据包。

3、TCPFIN扫描:

SYN扫描虽然是“半开放”方式扫描,但在某些时候也不能完全隐藏扫描者的动作,防火墙和包过滤器会对管理员指定的端口进行监视,有的程序能检测到这些扫描。相反,FIN数据包在扫描过程中却不会遇到过多问题,这种扫描方法的思想是关闭的端口会用适当的RST来回复FIN数据包。另一方面,打开的端口会忽略对FIN数据包的回复。这种方法和系统的实现有一定的关系,有的系统不管端口是否打开都会回复RST,在这种情况下此种扫描就不适用了。另外这种扫描方法可以非常容易的区分服务器是运行Unix系统还是NT系统。

4、IP段扫描:

这种扫描方式并不是新技术,它并不是直接发送TCP探测数据包,而是将数据包分成两个较小的IP段。这样就将一个TCP头分成好几个数据包,从而过滤器就很难探测到。但必须小心:一些程序在处理这些小数据包时会有些麻烦。

5、TCP反向ident扫描:

ident协议允许(rfc1413)看到通过TCP连接的任何进程的拥有者的用户名,即使这个连接不是由这个进程开始的。例如扫描者可以连接到http端口,然后用identd来发现服务器是否正在以root权限运行。这种方法只能在和目标端口建立了一个完整的TCP连接后才能看到。

6、FTP返回攻击:

FTP协议的一个有趣的特点是它支持代理(proxy)FTP连接,即入侵者可以从自己的计算机和目标主机的FTPserver-PI(协议解释器)连接,建立一个控制通信连接。然后请求这个server-PI激活一个有效的server-DTP(数据传输进程)来给Internet上任何地方发送文件。对于一个User-DTP,尽管RFC明确地定义请求一个服务器发送文件到另一个服务器是可以的,但现在这个方法并不是非常有效。这个协议的缺点是“能用来发送不能跟踪的邮件和新闻,给许多服务器造成打击,用尽磁盘,企图越过防火墙”。设计实现1.设计环境MicrosoftWindows是广泛应用的多任务、单用户和图形化用户界面的计算机操作系统,在Windows平台上进行软件开发已成为程序设计的主流。VisualC++作为一个功能非常强大的可视化应用程序开发工具,是计算机界公认的最优秀的应用程序开发工具之一。利用VisualC++开发面向对象Windows应用程序有两种主要方法:一种是使用Windows提供的WindowsAPI(ApplicationProgrammingInterface,应用程序接口)函数,另一种是利用Microsoft提供的MFC(MicrosoftFoundationClass,微软基础类库)类库。其中,WindowsAPI是Windows系统和应用程序间的标准接口,为应用程序提供Windows支持的函数定义、参数定义和息格式等。而MFC类库包括用来开发C++应用程序和Windows应用程序的一组类,这些类用来表示窗口、对话框、设备上下文、公共GDI对象如画笔、调色板、控制框和其他标准的Windows部件,封装了大部分的WindowsAPI函数。MFC还封装了重要的Windows扩展,如COM、ActiveX、ODBC和InternetAPIs,为这些难以编程实现的功能提供了简便实现方法。使用MFC,可以大大简化Windows编程工作,同时,MFC支持对底层API的直接调用。使用MFC编写Windows应用程序也称为标准Windows程序设计。因此,我们利用MFC中的各种类结合起来构成了一个端口扫描器的应用程序框架,然后在此基础上来开发Windows应用程序用于扫描端口达到了解端口状态的目的。总体上,MFC框架定义了应用程序的轮廓,并提供了用户接口的标准实现方法,我们所要做的就是通过预定义的接口把具体应用程序特有的东西填入这个轮廓。VisualC++提供了相应的工具来完成这个工作:AppWizard可以用来生成初步的框架文件(代码和资源等),资源编辑器用于直观地设计用户界面,ClassWizard用来协助程序员添加代码到框架文件中,最后进行编译,通过类库实现应用程序特定的逻辑。程序流程图开始扫描开始扫描初始化扫描单个端口?Tm_bSinglePort=true;m_cSinglePort.EnableWindow();m_cPortFrom.EnableWindow(false);m_cPortTo.EnableWindow(false);m_cBtnStop.EnableWindow(false);Fm_bSinglePort=false;m_cSinglePort.EnableWindow(false);m_cPortFrom.EnableWindow();m_cPortTo.EnableWindow();m_cBtnStop.EnableWindow(false);设置端口开始侦听端口有错误?显示结果FT设置下一端口扫描结束3.主要算法(1)测试主机某个端口是否打开的函数TestConnection():BOOLCMyDlg::TestConnection(CStringIP,UINTnPort){CSocket*pSocket; pSocket=newCSocket; ASSERT(pSocket); if(!pSocket->Create()) {deletepSocket; pSocket=NULL; returnfalse; } while(!pSocket->Connect(IP,nPort)) {deletepSocket; pSocket=NULL; returnfalse; } pSocket->Close(); deletepSocket; returntrue;}(2)响应单选按钮“扫描单个端口”和“扫描多个端口”的单击消息:voidCMyDlg::OnRadio1Single(){m_bSinglePort=true; m_cSinglePort.EnableWindow(); m_cPortFrom.EnableWindow(false); m_cPortTo.EnableWindow(false); m_cBtnStop.EnableWindow(false);}voidCMyDlg::OnRadio2Range(){m_bSinglePort=false; m_cSinglePort.EnableWindow(false); m_cPortFrom.EnableWindow(); m_cPortTo.EnableWindow(); m_cBtnStop.EnableWindow(false);}(3)显示列表框标题栏的成员函数://增加列表框标题栏的某一列BOOLCMyDlg::AddColumn(LPCTSTRstrItem,intnItem,intnSubItem,intnMask,intnFmt){LV_COLUMNlvc; lvc.mask=nMask; lvc.fmt=nFmt; lvc.pszText=(LPTSTR)strItem; lvc.cx=m_cResult.GetStringWidth(lvc.pszText)+25; if(nMask&LVCF_SUBITEM) {if(nSubItem!=-1) lvc.iSubItem=nSubItem; else lvc.iSubItem=nItem; } returnm_cResult.InsertColumn(nItem,&lvc);}//在列表框中加一条BOOLCMyDlg::AddItem(intnItem,intnSubItem,LPCTSTRstrItem,intnImageIndex){LV_ITEMlvItem; lvItem.mask=LVIF_TEXT; lvItem.iItem=nItem; lvItem.iSubItem=nSubItem; lvItem.pszText=(LPTSTR)strItem; if(nImageIndex!=-1) {lvItem.mask|=LVIF_IMAGE; lvItem.iImage|=LVIF_IMAGE; } if(nSubItem==0) retur

温馨提示

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

评论

0/150

提交评论