计算机网络课程论文-基于多线程的端口扫描程序

上传人:aa****6 文档编号:29271359 上传时间:2018-01-23 格式:DOC 页数:22 大小:286.50KB
返回 下载 相关 举报
计算机网络课程论文-基于多线程的端口扫描程序_第1页
第1页 / 共22页
计算机网络课程论文-基于多线程的端口扫描程序_第2页
第2页 / 共22页
计算机网络课程论文-基于多线程的端口扫描程序_第3页
第3页 / 共22页
计算机网络课程论文-基于多线程的端口扫描程序_第4页
第4页 / 共22页
计算机网络课程论文-基于多线程的端口扫描程序_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《计算机网络课程论文-基于多线程的端口扫描程序》由会员分享,可在线阅读,更多相关《计算机网络课程论文-基于多线程的端口扫描程序(22页珍藏版)》请在金锄头文库上搜索。

1、武汉理工大学计算机网络课程设计说明书0武汉理工大学计算机网络课程论文题目 基于多线程的端口扫描程序作者学院专业学号指导教师二一五年 七 月 六 日武汉理工大学计算机网络课程设计说明书1武 汉 理 工 大 学 信 息 工 程 学 院 课 程 论 文 诚 信 声 明本人声明:所呈交的课程论文,是本人在指导老师的指导下,独立开展工作所取得的成果,成果不存在知识产权争议,除文中已经注明引用的内容外,本课程论文不含任何其他个人或集体已经发表或创作过的作品成果。对本文工作做出重要贡献的个人和集体均已在文中以明确方式标明。本人完全意识到本声明的法律结果由本人承担。本 科 课 程 论 文 作 者 签 名 :二

2、 一 五 年 月 日武汉理工大学计算机网络课程设计说明书2课程论文成绩评定表质量评价指标(在相应栏目打)论文与设计评价质量评 价 项 目按对应项目打分工作量和态度(10 分)分析问题能力(10 分)解决问题能力(10 分)内容完整层次分明(10 分)设计、实验正确性(10 分)书写规范(10 分)流程图或拓扑图(10 分)论证充分(10 分)测试结果情况(10 分)总体评价(10 分)评定成绩(100 分制)指导教师签名年 月 日武汉理工大学计算机网络课程设计说明书3武汉理工大学计算机网络课程设计说明书0一、课题背景随着 Internet 的不断发展,信息技术已成为促进经济发展、社会进步的巨大

3、推动力。端口扫描技术是网络安全扫描技术一个重要的网络安全技术。与防火墙、入侵检测系统互相配合,能够有效提高网络的安全性。安全扫描是安全技术领域中重要的一类。通过扫描能自动检测远端或本地主机系统信息,包括主机的基本信息(如计算机名、域名、组名、操作系统型等)、服务信息、用户信息以及漏洞信息,它的重要性在于能够对网络进行安全评估,及时发现安全隐患,防患于未然。网络的安全状况取决于网络中最薄弱的环节,任何疏忽都有可能引入不安全的因素,最有效的方法是定期对网络系统进行安全分析,及时发现并修正存在的脆弱,保证系统安全。国外安全扫描技术的历史可以追溯到 20 世纪 90 年代,当时因特网刚刚起步,但是在过

4、去的十年内,扫描技术飞速发展,迄今为止,其扫描技术已经非常完善,但是在全面性,隐蔽性和智能性上还有待提高。安全扫描从最初专门为 UNIX 系统而编写的一些只有简单功能的小程序发展到现在,已经出现了可以运行多个操作系统平台上的,具有复杂功能的系统程序。国内的扫描技术是在国外的扫描器基础上发展起来的。其中有一些专门从事安全技术的公司。这些公司的扫描器以硬件为主,其特点是执行速度快,不像软件一样受到安装主机系统的限制。然而对于更多的基于主机的端口扫描而言,简单,实用,可靠才是它们的长处。武汉理工大学计算机网络课程设计说明书1二、设计理念每个正在系统上运行的程序都是一个进程。每个进程包含一到多个线程。

5、进程也可能是整个程序或者是部分程序的动态执行。线程是一组指令的集合,或者是程序的特殊段,它可以在程序里独立执行。也可以把它理解为代码运行的上下文。所以线程基本上是轻量级的进程,它负责在单个程序里执行多任务。通常由操作系统负责多个线程的调度和执行。线程是程序中一个单一的顺序控制流程.在单个程序中同时运行多个线程完成不同的工作,称为多线程.端口扫描的原理其实非常简单,只是简单的利用 VC+提供库函数 Socket 进行调用,与每一个感兴趣的目标计算机的端口进行连接。如果对方端口处于监听状态,那么连接就能成功。否则,这个端口不能用,既没有提供服务。这个技术的一个最大的优点是,不需要任何权限,系统中的

6、任何用户都有权利使用这个调用。 引入多线程机制,利用多线程扫描的好处就是速度快,如果对每个目标端口以线性的方式使用单独的连接调用,那么将会花费相当长的时间。多线程同时打开多个套接字,从而加速扫描。在本设计中用户可以自定义线程的个数。此处用户还可以自定义扫描方式。用 VC+6.0 开发多线程应用程序有两种方法,一种是利用 Win32API 函数,它的特点是代码小巧,执行效率高,但开发难度大;另一种是利用 MFC 类库,它的特点是开发方便,但代码庞大。下面,以端口扫描程序为例,介绍利用目前较流行 MFC 类库进行多线程应用程序的开发方法。武汉理工大学计算机网络课程设计说明书2三、过程论述1.过程流

7、程图开始输入要查找的计算机的 I P地址设置输入端口的范围输入线程数线程数 0 ?是否查找端口 , 建立连接记录端口序列结束图 1 过程流程图2.程序设计过程(一)MFC 多线程的类型MFC 区分两种类型的线程:用户界面线程(user2interfacethreads)和工作者线程(workerthreads)。用户界面线程通常用来处理用户的输入并响应各种事件和消息。工武汉理工大学计算机网络课程设计说明书3作者线程通常用来完成程序的后台处理任务,比如计算、调度、后台打印等,没有消息机制,不需要与用户交互。这两种线程类都是从 CWinThread 类派生而来的,不同的是,工作者线程不用从 Cwi

8、nThread 类派生来创建,而由函数 AfxBe2ginThread()自动创建。(二)用户界面线程的创建首先,从 CWin Thread 类派生出自己的线程类,必须确保用 DECLARE_DYNCREATE和 IMPLEMENT_DYNCREATE 对该类进行声明和实现,然后该类重载一些函数,如ExitInstance,InitInstance,OnIdle,PreTrans2lateMessage,ProcessWndProcException,Run 等等,最后调用 AfxBeginThread()创建并启动线程,其原型如下:CWinThread3AfxBeginThread()CRu

9、ntimeClass3pThreadClass,/从 CWinThread 派生的运行类int nPriority = THREAD_PRIORITY_NORMAL,/线程优先级UINT nStackSize = 0, /线程堆栈大小,如为 0,则与父线程堆栈大小相同DWORD dwCreateFlags = 0, /线程创建时的附加标志LPSECURIT_YATTRIBUTES lpSecurityAttrs = NULL); / /安全属性指针另外,还可以通过构造函数创建类 CWinThread 的一个对象,再调用函数:CreateThread 启动线程的方法来创建一个用户界面线程。(三)

10、工作者线程的创建创建工作者线程相对比较简单,只需要两步:编写控制函数和启动线程。所谓控制函数,就是指想要并行运行的子程序。当进入该函数时,线程开始运行,退出时,线程终止,其声明如下:UINT MyControllingFunction (LPVOID pParam) ;武汉理工大学计算机网络课程设计说明书4参数 pParam 是一个单精度 32 位值,是调用函数创建线程对象时,传递给线程函数的参数。它可以是一个数值,也可以是指向包含多个参数的结构指针,甚至可以忽略。如果该参数是一个结构指针,那么该结构不仅用于调用函数传递参数给线程函数,还可以将数据从线程函数回传给调用函数。如果使用该结构回传数

11、据,当线程函数的数据准备好的时候,要通知调用函数。控制函数的返回值为 0,则表示成功,不为 0,则表示发生了不同类型的错误。启动线程时,调用函数 AfxBeginThread()创建并初始化一个 CWinThread 对象,启动并返回该线程的地址,以备后用。(四)线程间的同步当两个或两个以上的线程同时访问同一个数据时,可能会导致意想不到的或者非预期的结果,例如,一个线程正在更新一个结构的内容,同时另一个线程正在读取该结构的信息,那么不知道读取结构的线程获得的是更新之前的旧数据还是更新之后的新数据,或者是两者的混合。MFC 提供了一组同步类和同步访问类来解决这个问题。包括两大类:同步对象(Csy

12、ncObject,Csemaphore,Cmutex,CcriticalSection 和 Cevent)和同步访问对象(CmultiLock 和 CsingleLock)。其中 Csync2Object 是其它四个同步对象的基类,不直接使用。信号同步类 CSemaphore:允许有限数量的线程访问一个资源,通常用于控制一定数量的用户访问共享资源;互斥同步类 CMutex:允许一个线程以独占的方式访问一个资源,通常用于一次只允许一个线程修改数据或其它控制信息;临界区同步类 CCriticalSection:允许一个线程以独占的方式访问一个资源,通常用于一次只允许一个线程修改数据或其它控制信息,

13、当程序对速度要求较高并且对共享资源的访问没有超出进程的范围时,可用 CCriticalSection 代替 CMutex;事件同步类 CEvent:允许一个线程通知另一个线程某一事件已经发生,通常用于当武汉理工大学计算机网络课程设计说明书5一个线程需要知道它什么时候开始执行某项操作的时候。四种同步对象的使用方法很简单,多数情况下不需要同步访问类 CSingleLock 和CMultipleLock。首先在主程序中创建同步对象,然后在线程需要访问共享资源的时候,直接调用同步对象自身的成员函数 Lock()和 Unlock()就可以了,例如:CriticalSection.Lock();Threa

14、dNum+;CriticalSection.Unlock();(五)程序代码功能实现1用 AppWizard 生成一个 win32 控制台程序框架,并选择支持 MFC。由于该程序用到多线程和 winsock;所以在头文件当中要加入:include“afxmt.h”include“Winsock2.h”2定义当前线程计数器,初始值取 0;intThreadNum=0;3因为每个线程都要对当前的线程计数器进行修改,所以要定义线程同步对象:CCriticalSectionCriticalSection;4编写线程控制函数,每个线程需要知道自已要对哪台主机的哪个端口进行扫描,因此定义如下线程参数结构:

15、structThreadParamint iPot; /被扫描的端口号int a,b,c,d; /ip 地址的四个分段实现线程控制函数 TestThread():UINTTestThread(LPVOIDpParam)charip16;/用于存放 ip 地址intiPort=(ThreadParam3)pParam)-iPort;/从参数中取出被扫描端口号武汉理工大学计算机网络课程设计说明书6sprintf(ip,“%d.%d.%d.%d”,(ThreadParam3)pParam)-a,(ThreadParam3)pParam)-b,(ThreadParam3)pParam)-c,(Thre

16、adParam3)pParam)-d; /将 4 个分段合并成 IP 地址SOCKET WinSocket;structsockaddr inlocal_sin;/定义端口和地址addr.sin_family=AF_INET; /tcp/ip 协议族SOCKET sck_Conn; /socket 描述符sck_Conn=socket(AF_INET,SOCK_STREAM,0); /生成一个 TCP 的socket ,命名为 sck_Connif(ddd=SOCKET_ERROR)if(REPORT_FAILED)aa.Format(failed! port:%drn,i); /尝试建立连接,失败则返回“failed”elseif(REPORT_SU

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 学术论文 > 毕业论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号