- 1、本文档共10页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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编程的理解吧。端口扫描,上次实
您可能关注的文档
- Book3unit6语法定语从句.doc
- be动词句式变化.doc
- BPO管理.doc
- B二水平回风大巷断层架棚处做假顶施工方案.doc
- B2C电子商城系统笔记.docx
- C++上机期末考题答案.doc
- C++中的静态绑定和动态绑定.docx
- c++判断选择.doc
- BST实现动态查找表.doc
- C++第6次作业.doc
- 2021年吉林省通化市临床执业医师其它真题(含答案) .pdf
- 2021学年大连市第十五中学高三语文第四次联考试卷及答案 .pdf
- 2021年7月银行从业资格考试公司信贷测试卷含答案 .pdf
- 2019-2020年高中地理 第一章 第三节 人口迁移教案 湘教版必修2.pdf
- 2021年最新时事政治—从众心理引发消费的全集汇编含答案_图文 .pdf
- 2021年山东省济宁市邹城市中考数学三模试卷(附答案详解) .pdf
- 2022-2023书香伴我成长演讲稿2022-2023优秀获奖作文范文5篇最新.pdf
- 2021年北师大版七年级数学上册期末试卷及答案【汇总】 .pdf
- 2019-2020学年人教新课标三年级上册数学第四单元测试卷(含答案).pdf
- 2018-2019学年山东省滨州市博兴县九年级(上)期末物理试卷 .pdf
文档评论(0)