系统说明文档

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

系统说明文档
一、功能需求
1. FTP抓取
1)扫描一个ip段
输入一个ip段,对这个ip段中的所有FTP进行扫描,使用默认端口21以及匿名来连接。

如果可以搜索到数据,就把这个服务器及其目录和文件信息添加入数据库。

2)更新
对于数据库中已有的FTP地址进行扫描,更新服务器、目录和文件信息。

2. 搜索
1)关键词搜索
用户输入关键词、关键词需不需要分词、搜索类型和每页显示的结果数,服务器根据这些选项,返回搜索结果。

2)站点快照
将FTP站点的信息全部抓到本地数据库,提供离线的FTP资源浏览。

3)常用搜索
列出每个类型最常用的搜索。

4)站点排行
列出规模最大以及点击率最高的一些大型站点。

3. 用户管理
1)会员制度
采取注册会员才能搜索的制度控制用户群的数量。

用户有一段时间的免费使用期,过期以后只有续费了才能继续搜索。

2)VIP用户
对于一些大型FTP站点的站长,给与VIP权限即永久查询权限。

3)管理员
对普通用户有管理权限。

二、系统特色
1)具有Web管理和使用界面,也具有基于命令行的管理接口。

2)支持非匿名站点的抓取和站点快照。

3)前端查询与后台抓取只通过数据库共享数据,实现上互不干扰,可分别
开发。

4)自我学习机制的分类算法,提高了查全率和查准率。

5)站点统计数据和用户点击率挂钩,更好得反应站点的热门程度。

三、具体实现
1. 总体结构
本系统主要由抓取模块、查询模块和用户管理模块构成。

抓取模块负责对ftp 资源进行抓取,将抓取到的结果添加入数据库;查询模块负责将分析查询请求,生成结果集;用户管理模块负责用户的登陆注销注册等功能,控制用户的访问和整体界面。

图2-1 搜索引擎结构图
2. 数据抓取模块
1)FTP抓取
这部分是由类WebFetching实现的抓取器,抓取器的功能如下:
首先连接FTP,连接成功后使用一定的用户名和密码登陆。

登陆成功后,从当前目录开始扫描该站点的信息,采用先深度搜索的算法递归遍历整个FTP 的所有目录,取得所有目录和文件的信息,并把这些信息及其关联关系存储到数据库中。

在本系统中,该类主要包含三类成员函数:连接FTP服务器成员函数,包括Connect(),WaitReply(),WaitSucc(),WaitConnect();采集FTP目录和文件信息成员函数,包括GetPwd(),QueryDir(),Dorecursive(),RetrieveFileInfo();访问数据库成员函数,包括ConnectDB(),WriteDB(),PostSetDB();。

其中,对某个FTP服务器目录和文件信息的收集是通过递归调用DoRecursive(FileInfo &fileinfo,DirInfo &topdir,int dirlevel)函数实现的。

这是一个先深度搜索的算法。

Topdir保存了当前目录信息,fileinfo保存了当前查询的文件信息,dirlevel表示当前进入到第几层目录。

运行时,先向FTP服务器发送命令,请求转换到topdir指示的当前目录;然后通过QueryDir(int dirlevel)得到当前目录下的所有目录和文件信息,并把它们入队;然后循环地,队列的每个元素都出队,送到RetrieveFileInfo(FileInfo &fileinfo,DirInfo &topdir,DirInfo &newdir)函数进行处理,直到队列为空;RetrieveFileInfo(FileInfo &fileinfo,DirInfo &topdir,DirInfo &newdir)函数对元素进行判断,如果是文件,那获取文件的信息,并保存到fileinfo 变量中,返回TYPE_FILE;如果是目录,那由原目录和新增加的目录形成新的目录,获取目录信息,并保存到newdir变量中,返回TYPE_DIR;如果是其他类型,返回TYPE_USELESS或TYPE_ERROR。

表2-1 目录查询算法
表2-2 文件信息查询算法
表2-3 目录树查询算法
对数据库的插入,则嵌入在递归过程中。

由于数据库在建表的时候对主键采用auto_increment ,因此可以很好地解决多线程的互斥问题。

在保存目录和文件信息的时候,也同时把它们之间的联系也存储到数据库中,即哪个文件对应哪个目录;同样,在目录和服务器之间也建立了这种联系,即哪个目录对应着哪个服务器。

保存这种联系会使多线程的互斥变得繁琐,但程序中很好的通过先
“先
插入,再查询,再插入”这样简单的方法来解决,实验证明,效果不错。

ConnectDB(),WriteDB(),PostSetDB()分别实现对数据库操作的三个阶段,即初始化数据库,对数据库进行查询和写以及更新的操作,后处理数据库。

2)多线程调度
为了提高数据采集的效率,采用多线程并发爬取多个FTP站点信息。

但是,为了避免对站点造成DOS攻击,任何时候,一个FTP站点只允许一个线程访问。

下面是对于ip段的解析以及互斥算法:
表2-4 IP段解析互斥算法
3. 查询模块
1)查询
提供WWW页面上的FTP文件搜索。

用户浏览到此Web页面,填写并提交表单,表单中包含用户所要查找的文件信息。

表单提交给Web服务器后,分析生成查询语句,提交给数据库服务器进行查询。

由用户输入查询关键字K={k1, k2, …, k|k|},关键词类型kType,选择欲查找的文件类型dType,并确定每页显示的结果数dispPerPage,查询结果集合表示为R={r1, r2, …, r|R|}。

如果用户选择关键词类型为单个关键词,则不管关键词里面是否有空格,都不将关键词拆开,查询数据库中是否有包含这个关键词的目录或者文件;如果用户选择关键词为多个关键词,则以空格分隔关键词,查询同时包含这些关键词的目录和文件。

如果查找的文件类型不是“任意”,则仅查询类型值为“任意”或者用户选择的那个类型的文件和目录,并且对结果进行排序时,
将类型不为任意的排在前面。

最后,还要将搜索结果按照站点的rank值排序,根据用户选择的每页显示的结果数输出第一页的结果。

同时,查询之前,将关键词K及其kType添加入数据库,如果已有,则增加其查询计数。

最后输出结果以后,在用户点击某个查询结果的时候,相应提高这个站点的rank值。

表3-1 查询算法
2)站点快照
列出指定站点指定目录下的所有文件夹和文件。

表3-2 快照算法
3)热门查询
列出每个类型里面最常用的查询。

每次用户查询一个关键词的时候,就把这个关键词的类型记录下来,查询次数为1,之后如果有用户再次查询这个关键词,递增查询次数。

输出每个类型的关键词中被查询最多的前30个关键词。

4)站点排行
输出rank值最高的10个站点。

4. 用户管理模块
1)登陆
除了一般的验证用户和密码外,再加上一条验证是否过期。

如果资料里面显示是VIP用户,则不需要验证过期。

2)推荐站点
用户提交他所知道的一些FTP的地址、用户名、密码等信息,添加入数据库,以一定的政策给与优惠。

3)申请VIP
用户提交他本人的FTP信息,申请成为VIP用户。

如果用户所在ip和其提交的FTP地址相同,就加入数据库临时表中,等待管理员批准,如果不相同,直接拒绝。

5. 数据结构
站点信息表:
目录信息表:
文件信息表:
关键词分类表:
关键词表:
用户信息表
四、运行效果
图4-1 FTP-SCAN图
图4-2 FTP-GET图
图4-3 登陆页面
图4-4 搜索页面
图4-5 搜索结果页面
图4-6 站点快照
图4-7 站点排行
图4-8 热门搜索
图4-9 用户信息修改页面
图4-10 vip申请页面
图4-11 推荐站点页面
五、附录
1. 小组5人行
一月来,融洽、愉悦的小组合作给大家留下了深刻的印象。

小组成员各有特色:李燕同学的睿智、机敏;李玉娟同学的活泼、勤奋;李宁波同学的严谨、尽善尽美;张鹏同学的踏实、内敛;以及张华同学的细致、一丝不苟;构成了一道靓丽的风景线,如图5-1所示。

分工图旨在说明大家合作的默契、丝丝相扣,并不完全反映任务的比例;大家都付出了许多,也收获了不少。

具体分工:
李宁波:多线程管理
张鹏:抓取ftp
李燕:整体查询算法控制、站点快照、站点排行
李玉娟:用户管理、整体界面和框架设计、热门查询
张华:界面设计、文档撰写。

相关文档
最新文档