1-Unix主机漏洞扫描器的设计与实现

教程大全 2025-07-08 09:58:51 浏览

漏洞扫描器 的总体目标是构造一个运行于操作系统平台的基于浏览器/ 服务器 (B/S)结构的,可以扫描Unix操作系统安全漏洞的主机漏洞扫描器。整个扫描器的结构如图1所示。

图1 Unix主机漏洞扫描器的结构

由于主机扫描模块需要模拟一些系统管理员的行为,所以必须在被扫描的目标主机上运行,而且需要超级用户的权限。主机扫描模块驻留于目标主机,它接受系统管理员通过控制平台服务器传来的启动命令及配置参数,根据用户的要求完成扫描功能,之后,将扫描结果通过控制平台服务器反馈给系统管理员,以便系统管理员做出响应。控制平台服务器是一个Web服务器,它可以与驻留于多个目标主机的主机扫描模块进行交互。

主机扫描模块的工作原理

整个主机漏洞扫描器的核心部件是主机扫描模块,主机扫描模块完成扫描的全部功能,其工作原理如图2所示。

其中,主机扫描引擎对目标主机进行扫描,获取扫描信息,然后由匹配机将扫描信息与主机系统配置规则库中的标准配置规则进行匹配比较,从而发现违反安全策略的配置行为,并进行相应的漏洞报警。在漏洞扫描器的实现中,主机扫描引擎、主机系统配置规则库和匹配机构成主机扫描模块,而漏洞报警被传送至控制平台服务器。

图2 主机扫描模块的工作原理

主机扫描模块与控制平台之间的通信

由于控制平台和目标主机不在同一台机器上,所以必须考虑主机扫描模块以何种方式同控制平台进行通信。在进行原型设计时,曾采用远程登录的方式:从控制平台输入管理员的账号和密码后登录到目标主机,再在目标主机上启动主机扫描模块。这样的方式在原型设计阶段是很适合的,因为用Perl语言和一些现成的包来实现Telnet是比较方便的,而且在字符界面下,目标主机的扫描结果可以通过Telnet协议返回到虚拟终端上,无需做专门的处理

但是在***成型阶段,这样的结构就具有一些缺点了:首先从实现上来讲,用C语言来实现Telnet的协商过程是一个很复杂的工作,而且扫描结果要在***的图形界面显示出来,又需要一个相对复杂的处理;最重要的是,作为一个网络安全的软件,本身的安全是很重要的,而Telnet方式是以明码方式在网络上传递超级用户的账号和密码的,这一点将使软件本身具有一个很大的安全隐患。所以***我们采用了浏览器/服务器结构。

整个主机扫描模块的采用的是浏览器/服务器结构。浏览器通过一个JavaScript请求模块把用户输入的目标主机的地址提取出来,加上一个特定的端口号,再作为一个完整的请求发送出去。浏览器对这个端口发出的请求是按照Http协议的格式发送的,如果在服务器端程序里再做一个类似于协议分析器的工具来分析到达的Http请求将会使实现变得非常复杂。其实利用套接字的原理就能方便地解决这个问题。

套接字是服务器端特定端口和客户端特定端口建立连接后的一个通道,此通道具有唯一性,因为它是由一个唯一的四元组来确定的:服务器端的IP地址和端口号、客户端的IP地址和端口号。当浏览器和服务器相应端口的连接建立以后,服务器端向该套接字发送的所有信息都将送到客户端的浏览器。

根据Web浏览器软件的特点和Http协议的特点,从服务器端来的信息如果只是ASCII信息,浏览器将缺省地把它归为text/plain类,当作文本直接显示,如果发送的信息再加上一些HTML的标记,浏览器则会把它看作text/html类显示,这样我们不仅能方便地把服务器端的输出结果显示到客户端的浏览器上,还能利用HTML的特点对显示加以控制。

所以我们只需在服务器端创建一个套接字,并绑定到特定的端口,然后程序在该特定端口监听。当有信息到达时,根据套接字的唯一性,程序不作其他考虑,认定它是从客户端来的扫描请求,马上启动主机扫描模块,而不用作复杂的Http协议请求分析;并实时地把扫描结果向该套接字输出,这样就能直接返回给浏览器并呈现给用户。

【编辑推荐】


编程语言学vb好还是c

VB是编程工具,C语言是一种编程语言,就好比“中国人”和“中文”一样,使用C语言编程的是windows下的集成开发环境是VC或VC++。 VC和VB的区别:语言不同,优缺点各有不同VB,因其语言简单,容易理解,不复杂,适合初学者使用,但你也不要小看VB,只要用心,vb也是能写出很强大的程序的。 VC,现在程序员主要使用的语言之一,适合写一些功能复杂的程序,但因其使用的C语言过于复杂,不好掌握,所以学起来要复杂一些,并且一些小型窗体程序做起来不如VB快,但是多窗体文档程序用VC是很好写的。 以下是两者的简单的比较:C是一门计算机语言VB是一个集成开发环境(但是人们通常也用它指代面向对象的BASIC语言);C是编译型语言(执行速度快),VB是解释型语言(执行速度慢);C比VB更底层(即接近机器);C的能力比VB更强(内存操作、中断处理、任务调度);C的应用范围比VB更大(VB编写的程序只能在windows上运行);VB可以做到的功能,C都可以办到,并且C可以跨平台(在windows/linux/unix上可以共享代码)。 VB以及用VB写的程序只能在Windows系统上使用,C无此限制(C最初是UNIX系统的工作语言)。

C语言设计

怎样才能学好C语言


1、学好C语言,你可以很好地应付任何一种编程工具。

2、一定要多上机练习,通过程式了解相关知识。几经反复方得正果。

3、不要把学习C语言当成一种任务,更不要把它看成很难完成的任务。要充满自信,只要是一个智力正常的人都能学好C语言。始终保持游戏的心态,多发现其中的乐趣。当感到编程趣味无穷,那你在电脑方面将前程无量。

4、如果一个程式一时无法弄清楚最后暂时放在一边,过一段时间你可能会从其他的程式中悟出道理。

5、C语言是一个整体,各个方面是有机联系的,要从总体上把握它,不要把它割裂成互不关联的部件。

6、不要完全相信教材(包括本讲义),所有结论最好都上机验证。
怎样学好C语言

1. 工欲善其事,必先利其器

准备工作:一个开发环境,如Turbo C 2.0、Visual C++等开发工具;一本好教材,如谭浩强主编的《C语言程序设计》(第二版)。我当时看的是他的第一版,就为它的简洁、完美所吸引,简直爱不释手,用了两个星期一口气看完。

2. 秘密武器

初学者学习计算机语言要会“读程序”,要对小型的应用型、游戏型程序感兴趣,并模仿去加深对C语言程序设计的理解和操作,只有不断地写程序、调试程序才能得到编写程序的经验和加深对程序的理解,这也是学习编写优秀高级程序的秘密武器。

3. 发扬探索精神

学习C语言程序设计有点像做数学难题,只要我们善于思考,善于探索,发扬探索精神去寻找好的设计思想和方法,才能把C语言的精髓真正地掌握。

备战C语言考试要诀

1. 了解大纲,临阵不乱

各类笔试中,大多数考题是与大纲要求的基本内容一致的,难度不高,但内容十分广泛,应牢固掌握C语言考试大纲要求的基础部分。只有熟悉题型,理解语法、句法,做到心中有数,才能临阵不乱。

2. 善于归纳,强化记忆

对于需要记忆的计算机基础知识和基本概念,如果考试时因此失分就十分可惜。如:C语言中有几种不同的数据类型?运算的优先级别是怎样的?因此我们需要善于归纳这些计算机基础知识,并在理解的基础上强化记忆。

3. 重视实践,善于调试

计算机科学是一门理论性、实践性都很强的学科,对C语言考试的参加者来说,基础理论方面要求不高,而上机试题往往是很多考生不能通过考试的重要原因,因此要勤于实践。

4. 多做练习,查漏补缺
1
在认真地学完指定用书后,最好再找些试题,认真地测试一下,一则可以检查自己的复习情况;二则可以查漏补缺;三则可以调节心理状况,以备正式考试时沉着冷静、万无一失。

谁能知道Java是什么

1966年,一门叫Simula的模拟语言备受人们青睐。 Simula是由Ole-Johan Dahl和Kristen Nygaard创建的,他们当时在奥斯陆的挪威国家计算机中心工作。 当时,Simula具有很多新的、有趣的特点。 例如,Simula可以把一组事件归入一个类别(classification),称之为“类”(class);也可以把某一类组成部分的子集归入另一个类别,称之为“子类”(subclass)。 Bjarne Stroustrup就是Simula的使用者之一。 20世纪70年代末,正在剑桥大学攻读博士学位的Stroustrup想在学位论文上有所突破。 除了这种语言在速度上非常慢之外,他对这种语言的其他方面都比较满意。 为了使模拟器运行得更快,他改写了Martin Richard的Basic Combined Programming Language(BCPL,基本组合程序设计语言)中的程序。 虽然要改变程序非常困难,但最后他还是通过了毕业论文答辩,并且在位于新泽西州Murray Hill的一家名为Bell Telephone Laboratories的电话公司实验室工作,也就是现在的美国朗讯公司。 20世纪70年代,贝尔实验室的一名工作人员Ken Thompson正致力于测试一门基于BCPL的新语言,称为B语言。 Ken Thompson想给B语言添加数据类型,于是在1971年他又发展了一门新的语言,称为C语言。 从那以后,C语言风靡全球。 以至于在1983年,美国国家标准化组织甚至考虑要把它作为该组织的一个标准(称为ANSI C)。 1979年5月,Stroustrup开始利用类(class)来开发一种称为C的项目。 他的目标是将C的速度和他所熟悉的Simula类结合在一起。 他当时还在贝尔实验室工作,并深知速度对于在那里工作的人来说是多么重要。 到了1983年,C++首次投入使用。 后来,C++越来越普及,并广泛应用在各个行业的许多公司里,其中包括位于加州Mountainview的一家名为Sun Microsystems的公司。 在1991年初,Sun公司的软件工程师就已经开始拓展嵌入式系统的市场。 这个被称为Project Green的项目,要求在各种消费者的电子设备中使用廉价的微处理器,这些消费者的电子设备包括个人数字助理(Personal Digital Assistant,PDA)、交互式电视盒以及家用电器。 Sun的另一个成员James Gosling开始扩展C++编译器。 20世纪90年代中期,又出现了一门叫做Oak的新语言。 后来,由于注册商标的问题,这一名称没有延续下来,而改为Java。 尽管Java是为嵌入式系统而设计的,但直到1994年,网络的使用才持续上升。 Java的出现正好适应了基于网络的应用。 尤其是Java具有多平台、简单、安全、强大的功能,而这些都是网络所需要的。 因此,Java的一些功能可以直接追溯到C++中的类(class),而类(class)又源于1966年出现的模拟语言Simula。 此外,Java也借鉴了C语言的一些功能。 实际上,如果详细研究Java语言,就会发现Java几乎没有什么可以称得上新颖的地方。 1.2 什么是Java人们已经习惯用Java这个术语来涵盖各种Java技术。 Java技术包括Java编程语言、支持类库以及Java虚拟机(Java Virtual Machine,JVM)。 Java技术利用Java模型实现了Java程序的运行。 典型的Java模型将利用若干层(也叫底层,substrate)。 Java程序被一个叫做Java虚拟机的底层从硬件中隔离出来。 图1.1显示了一个Java模型。 图1.1 Java模型Java盛行的原因很多。 首先,Java是一门多平台语言。 Java多平台功能的关键元素是peer方法,如图1.1所示。 peer方法提供了一个应用程序接口(Application Program Interface,API)。 该接口的目标就是提供一个从高级Java应用程序接口到初级操作系统子程序的映射。 peer方法提供了一种实现可移植操作系统接口的方法。 操作系统软件接口库提供了一个ANSI C、C++或FORTRAN都没有的编程环境。 这种环境为程序提供外观和运行方式。 例如,C++程序员在Windows下编程,编程环境就像是一个Windows编程环境。 也就是说,可能会调用Microsoft基础类。 如果在UNIX下编程,编程环境就像一个UNIX环境,即要调用X-Window库子程序。 Java的独特之处是它能够提供一个可移植的操作系统软件接口。 例如,不管使用哪种操作系统,用Java编写一个显示对话框的程序都是相同的。 但是,Java的可移植功能也会受到库的跨平台支持的限制。 在这种情况下,使用非可移植库的Java程序将不再是可移植的了。 例如,有人在Java内创建了到C库子程序的链接。 由于要使Java成为可移植的,其他平台上必须提供这些子程序。 把Java臆想成一门“编译一次,走遍天下”式的语言是错误的。 Java在每个平台上都需要测试,有时还需要调试。 因为在一个平台上运行良好的程序在另一个平台上却不能运行,这种情况很常见。 此外,Java以外的语言也可以利用Java技术。 例如,要实现一个非Java编译器来创建可在Java虚拟机(JVM)上运行的Java字节码是有可能的。 1.3 Java模型与HTML模型的比较我们已经知道Java是为嵌入式系统而设计的一门语言。 但是,Java过去并没有广泛用于嵌入式系统。 相反,人们认为可以用Java来补充甚至替代HTML模型。 本节将讲述HTML模型以及Java怎样替代HTML模型。 我们可以在Internet上找到很多文件。 数据结构保存在文件中并需要解码。 可被生成的不同数据文件的数量是不受限制的。 尽管文件格式的数量是可计算的,但通常谁都没有计算,并且该数字将以未知的速度增长。 用于计算不同文件格式数量的工具很少,而用来解码这些文件格式的工具就更少了。 图1.2讲述了数据分布的Web模型。 Web服务器通过超文本文件传输协议(Hyper Text Transfer Protocol,HTTP)把Web页面传给客户端。 浏览器使用包含特定格式代码的插件程序(plug-ins)来进行解码。 不同的文件格式要求用不同的插件程序或辅助程序来显示。 所以,插件程序扩展了浏览器的性能。 使用Java技术的浏览器通过动态下载的算法能够进行解码。 这一过程要求一种能够即时运行程序的方法。 为了明确安全性,Java给即时下载的程序设置了功能限制。 安全管理器(security manager)对即时下载的Java程序的功能进行了准确控制。 用Java模型代替HTML模型的基本前提是,程序可以在不同的平台上按要求运行。 但是,由于Java缺乏统一的支持,所以Java模型没能代替HTML模型。 当前的不利因素包括人们对Java技术及知识产权的争论。 图1.2 Internet1.4 小结与C或C++不同,当用Java编程的时候,编程环境感觉像Java。 另外,C++没有Java所具备的可移植应用编程接口(API)。 如果在Windows中用C++编程,编程环境就像Windows,因此必须学习Windows API。 同样,如果在Macintosh下用C++编程,编程环境就会有一种类似Maxintosh接口的外观和运行方式。 基于上述的讨论,有人认为客户端的Java是一成不变的,HTML模型的变革也不可能发生。 然而,仅在2001年3月到8月短短5个月的时间内,600多万部用Java开发的手机在日本被抢购一空。 无线供应商(NTT DoCoMo、J-Phone和KDDI)已提供了交互式服务。 有人预计,在2001年到2005年期间,有7亿多台Java虚拟机将要被配置到这些新设备上。 或许,这些具有JVM特性的新平台会使客户端Java能够长久地延续下去。

本文版权声明本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请联系本站客服,一经查实,本站将立刻删除。

发表评论

热门推荐