Linux多线程端口扫描.doc_第1页
Linux多线程端口扫描.doc_第2页
Linux多线程端口扫描.doc_第3页
Linux多线程端口扫描.doc_第4页
Linux多线程端口扫描.doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

四 川 大 学 计 算 机 学 院、软 件 学 院实 验 报 告 学号:_1143111006 _ 姓名:刘家豪 专业:软件工程 班级:5班 第 8 周 课程名称 信息安全产品开发实践实验课时3实验项目并发服务器II多线程实验时间2013.10.25 15:00-2013.10.25 16:00实验目的 修改远程控制程序服务器程序,将其从循环模式或多进程模式修改为多线程模式 实现一个多线程端口扫描程序:要求:1. 能同时扫描5个IP地址;2. 针对每个iP地址,开设100个线程对其进行扫描;3. 如果端口打开,使用函数getservbyport获取其服务名,在屏幕上打印:IP port servername,如果是未知服务,则屏幕显示:ip port unkonown实验环境 Windows7 64-bit VMware 9.0 RedHat Enterprise Linux 6.0实验内容(算法、程序、步骤和方法) 第一个实验:修改远程控制程序服务器程序,将其从循环模式或多进程模式修改为多线程模式。这个实现起来比较简单,就是在上次TCP C/S架构通讯的基础上稍加修改就可以了,上次的tcp通讯程序了,在server端,每当有客户端发起连接后都由服务器直接在一个while循环里与其建立服务,现在,我们改为:每当有客户端发起连接时,就创建一个线程来为其服务:这里使用的是分离线程,因为这里也不可能用到pthread_join函数来等待子线程,所以,子线程是自己释放空间的。第二个实验:多线程端口扫描。我这里就把程序结构和我的思路联合起来讲吧:为了方便调试,我自己定义了一个错误信息输出函数,内容如下:_LINE_是C程序自定义的一个宏,_FILE_也是,作用分别是发生错误的代码行数和文件。(很好用的)然后定义一个结构体来存放要扫描的主机信息:因为我们要同时扫描5个主机,所以待会可能就是直接声明一个Port数组了。既然要实现端口扫描,那么,我也可以将任务分解下,可以分解为扫描一个固定主机的一个范围的端口,在此分解下,又可以分为扫描一个固定主机的固定端口,当然,实际上我也是这么做的。那么首先看下怎么实现扫描一个固定主机的一个端口:原理很简单,就是直接对该主机的某一端口号发起TCP连接,看返回值就行了。代码上也有注释,我就不细说了。那么再过来就是实现扫描某一主机的一个范围的端口了:这个就先讲下原理吧:也很简单,就是用一个循环来给一个sockaddr_in的结构体的端口号依次赋不同的值,然后再执行扫描该主机该端口号就行了,而这个上面已经实现了。下面是扫描一个主机的一个范围的端口号,原理上面已经解释了,而且下面代码里也有部分注释,所以这个函数应该很清晰了:接下来就直接看主函数了:主函数的开始部分没啥说的了,声明相关变量下面要用,因为我的这个程序是可以实现多主机多端口扫描的,所以在执行程序时要输入相关变量:比如说要扫描哪些主机,要扫描的端口号的范围,以及想要并发多少线程扫描,这些信息都是通过输入来确定的,主函数的开始部分代码为:当然,输入参数不正确会有提示信息的。下一步也很清楚了,既然输入了参数,肯定是要解析这些参数并初始化相关变量吧:要解析的参数也不用说了吧,就IP地址,端口号和并发的线程数。上面代码中最后一行语句是为线程分配地址空间。接下来就是主要部分了,实现并发扫描:代码中第一行输出语句是提示信息,后面则是通过两个循环来实现多主机一个范围端口的扫描,这里用的是联合线程,我们通过pthread_join函数来实现等待子线程结束,但最后要记得释放线程空间,否则造成内存泄露就不好了。总而言之,就是这样实现了。下面就是编译运行了。首先是第一个实验:编译运行文件如下(POSIX线程库不是Linux的默认库,所以编译时要加上-lpthread)从程序运行结果来看,完成了预期功能。第二个实验编译与运行结果:当然,输入时可以输入多个IP地址(限制5个),我这里演示只输入了两个。从程序运行结果来看,达到了预期目标。数据记录和计算 无结 论(结 果) 见实验内容部分小 结 怎么说呢,这次试验加深了对多线程的理解,第一个实验并不难,也就注意两点就行了:第一就是注意释放空间或使用分离线程,第二是注意使用线程,因为有可能结果是两个客户端的通信会出问题。反正加很小一段代码就可以实现。第二个实验稍加难一点,因为在使用多线程的基础上,还要考虑并发扫描多主机多端口以及对线程空间的释放。也许这个实验里除了多线程,本身Linux编程也占一部分吧。但这只能说让我加深了对Linux编程的理解吧。端口扫描,上次实现过两次,这次又用多线程实现了还不是很有趣么。指导老师评 议 成绩评定: 指导教师签名:实验报告说明 专业实验中心 实验名称 要用最简练的语言反映实验的内容。如验证某程序、定律、算法,可写成“验证”;分析。实验目的 目的要明确,要抓住重点,可以从理论和实践两个方面考虑。在理论上,验证定理、公式、算法,并使实验者获得深刻和系统的理解,在实践上,掌握使用实验设备的技能技巧和程序的调试方法。一般需说明是验证型实验还是设计型实验,是创新型实验还是综合型实验。实验环境 实验用的软硬件环境(配置)。实验内容(算法、程序、步骤和方法) 这是实验报告极其重要的内容。这部分要写明依据何种原理、定律算法、或操作方法进行实验,要写明经过哪几个步骤。还应该画出流程图(实验装置的结构示意图),再配以相应的文字说明,这样既可以节省许多文字说明,又能使实验报告简明扼要,清楚明白。数据记录和计算 指从实验中测出的数据以及计算结果。结论(结果) 即根据

温馨提示

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

评论

0/150

提交评论