四 川 大 学 计 算 机 学 院、软 件 学 院
实 验 报 告
学号:__1143111006 _ 姓名:_刘家豪_ 专业:_软件工程_ 班级:_5班_ 第 8 周 课程名称 实验项目 信息安全产品开发实践 实验课时 3 2013.10.25 15:00- 并发服务器II——多线程 实验时间 -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数组了。 既然要实现端口扫描,那么,我也可以将任务分解下,可以分解为扫描一个固定主机的一个范围的端口,在此分解下,又可以分为扫描一个固定主机的固定端口,当然,实际上我也是这么做的。 那么首先看下怎么实现扫描一个固定主机的一个端口: