- 1、本文档共12页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
病毒库自动升级模设计文档
病毒库自动升级模拟实验报告
一、课程设计要求
A采用推送方式将最新病毒库数据发送到从服务器
Si采用推送方式将最新病毒库数据发送到客户机Cij
客户机Cij可以从Si接收数据,也可以从其他客户机接收数据
A,Si,Cij通信采用socket进行通信
系统使用UNIX/Linux + C 实现
二、系统概要设计
1.主服务器概要设计
功能:
响应从服务器的请求
推送新病毒库至从服务器
日志记录
节点失效检测(针对从服务器)
人机交互
工作流程:
启动后在端口1上进行监听,响应从服务器的请求
利用端口2推送最新病毒库数据至与之连接的从服务器
节点失效检测采用心跳机制来检测从服务器的连接状况
人机交互模块等待系统管理员输入命令
各个模块每处理一次事务都会调用日志操作模块,将操作写入日志
从服务器列表内容
与从服务器进行命令通信的socket:sockfd1
与从服务器传输文件使用的socket:sockfd2
从服务器ID、IP地址、当前病毒库版本号
从服务器在线状态、监听的端口号1、端口号2
日志内容:
何时在端口1/2上进行监听
人机交互内容和结果
从服务器连接/断开的相关信息
主服务器推送病毒库的相关信息
人机交互内容:
更新病毒库
添加合法从服务器
添加合法客户机
查看从服务器/客户机的信息
删除从服务器/客户机
重新启动服务
退出程序
2.从服务器概要设计
功能:
在端口1上监听,响应客户机的请求
与主服务器进行通信
接收主服务器推送的最新病毒库数据
推送最新病毒库至在线的客户机
日志操作
节点失效检测(针对客户机)
人机交互
工作流程:
启动后连接主服务器
加载病毒库版本信息,向主服务器发送自身病毒库信息(进一步与主服务器通信)
在端口1上监听,等待客户机的连接请求,根据通信信息进一步行动
在端口2上监听,用于传输病毒库文件
节点失效检测采用心跳机制动态维护客户机列表
人机交互模块始终等待用户输入命令,执行命令
各模块处理一次事务后调用日志操作模块,将操作保存在日志中
客户机列表内容:
客户机的ID、IP地址、端口号1、端口号2
客户机上最新病毒库版本信息
客户机在线状况
人机交互内容
升级病毒库
显示本机病毒库版本信息
显示客户机信息
重启服务
退出程序
日志内容类似于主服务器的日志内容;
3.客户机设计
功能:
与主服务器通信,接收病毒库文件
为其他客户机提供病毒库文件
人机交互
日志操作
工作流程:
启动后连接从服务器(Si:port1)
加载病毒库版本信息和ID,向从服务器发送信息(进一步工作由从服务器决定)
根据从服务器的命令,进行相关处理(包括接收病毒库文件、为其他客户机提供最新病毒库文件)
启动人机交互,始终等待用户输入命令,执行命令
处理事务后将操作保存在日志中
人机交互内容:
升级病毒库
显示本机病毒库版本
退出程序
三、系统详细设计
病毒库的版本号由主版本号和此版本号组成,类型是32位整型。
病毒库文件使用三个有关联的文件表示:病毒库版本文件(versionfile)、病毒索引文件(indexfile)和病毒特征值文件(datafile)。
病毒版本文件:包含了各个版本的主版本号(majorv)、次版本号(minorv)、新添病毒位于索引文件中的开始位置(begin)、相对前一版本新添病毒的总数量(size)、已写入病毒库中的病毒的总数量(wsize)、该版本包含病毒的总数(total)等信息。按块的形式读写。
病毒索引文件:包含了某一病毒的ID、病毒特征值在病毒特征文件的开始位置、病毒特征值的大小的等信息。按块的形式读写。
病毒库特征值文件:由所有病毒特征值组成的文件。按字节的形式读写。
三个文件的内容和关联如下图:
将上面三个文件中的内容读入内存时,采用链表存储,链表的结构如下图:
保存病毒信息的数据结构,通过读取indexfile和datafile文件创建该链表
typedef struct virus{
u32 ID; //病毒编号
u32 begin; //病毒特征值在文件中的开始位置
u32 size; //病毒特征值的大小
char *data; //病毒特征值的内容
struct virus *next;
}*VirusList;
保存病毒库信息的数据结构,读取versionfile和VirusList链表创建该链表
typedef struct version{ //保存病毒库信息
u32 majorv; //主版本号
u32 minorv; //次版本号
u32 begin; //该版本的病毒库新添的病毒的索引起始位置
u32 size; //该版本的病毒库新添的病毒总数目
u32 wsize; //该版本的病毒库已更新的病毒数目(对于主服务器无意义)
u32 tot
文档评论(0)