Linux多线程端口.doc

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Linux多线程端口

四 川 大 学 计 算 机 学 院、软 件 学 院 实 验 报 告 学号:__1143111006 _ 姓名:_刘家豪_ 专业:_软件工程_ 班级:_5班_ 第 8 周 课程名称 信息安全产品开发实践实验课时3实验项目并发服务器II——多线程实验时间2013.10.25 15:00- -2013.10.25 16:00实验目的 修改远程控制程序服务器程序,将其从循环模式或多进程模式修改为多线程模式 实现一个多线程端口扫描程序: 要求: 能同时扫描5个IP地址; 针对每个iP地址,开设100个线程对其进行扫描; 如果端口打开,使用函数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编程的理解吧。端口扫描,上次实

文档评论(0)

2017ll + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档