首页 > 文章中心 > linux系统

linux系统

linux系统

linux系统范文第1篇

linux系统时间设置

1、打开linux系统,在linux的桌面的空白处右击。

2、在弹出的下拉选项里,点击打开终端。

3、在终端窗口输入date命令就可以查看到当前的时间了。

4、接着输入命令date-s就可以修改想要的时间了。

linux系统范文第2篇

【关键词】Linux;操作系统;特色

一、Linux的发展历史

Linux的诞生可以追溯到1991年,当Linus还是芬兰赫尔辛基大学的一名学生时,他对当时为教学而设计的Minix操作系统提供的功能不满意,于是他决定自己写比Minix更强大的类UNIX操作系统来取代Minix,后来这个类UNIX操作系统就是Linux。Linus从一开始就决定自由扩散Linux,他把源代码在Internet上,随即就引起爱好者的注意,他们通过Internet加入了Linux的内核开发工作,一大批高水平程序员的加入,使得Linux得到迅猛发展,他们为Linux修复错误、增加新功能,不断尽其所能地改进它。现在,Linux凭借优秀的设计,不凡的性能,加上IBM、Intel、AMD、DELL、Oracle、Sybase等国际知名企业的大力支持,市场份额逐步扩大,逐渐成为主流操作系统之一。

二、Linux的特色

(1)多工系统――同时执行多个进程;(2)多人使用――同一部机器可供多人同时使用;(3)须在386 protected mode 下执行;(4)采用保护模式的方式执行各个进程,所以个别的进程失控不会造成系统死机;(5)Linux 在磁盘上只读取程序中实际用到的部份(动态联结,dynamic linking);(6)各程序可使用copy-on-write pages 上的资料,意即多个程序可以使用同一块内存区。最初几个程序共用一块内存区域,但当某个程序尝试写入这段内存时,该page(4KB)就被拷贝一份到别的地方,以後该程序的那4KB 就指向新的page。如此一来可增加速度并减少内存的使用;(7)Linux 可使用虚拟内存,但须在硬盘上规划一块区域作置换用的partition;(8)Linux 符合POSIX 定义,原代码与System V、及一部份的BSD和SVR4完全兼容;(9)透过iBCS2 模拟可执行大部份SCO UNIX、SVR3、SVR4 的程序;(10)所有的原代码都是可免费获得的,包括所有的核心程序、驱动程序、发展工具程序、使用者的程序。(11)支持多国语言键盘且易新增;(12)多重虚拟的consoles――可使用热键作更换;(13)支持数种常见的文件系统minix-1、Xenix、System V filesystems,DOS,FAT,OS/2的HPFS(read-only)。本身支持两种file system:EXT2 and XIAFS,且文件名称长度可至256 个字;(14)“UMSDOS(Unix-like MSDOS)”可在DOS partition 中安装Linux;(15)支持的CD-ROM 文件系统,可读取各种标准CD-ROM 格式,如ISO 9660;(16)TCP/IP 网络,包含ftp,telnet,NFS等。

三、Linux与其他操作系统的区别

1.Linux和Windows的区别。和Linux一样,Windows系列是完全的多任务操作系统。它们支持同样的用户接口、网络和安全性。但是,Linux和Windows的真正区别在于,Linux事实上是Unix的一种版本,而且来自Unix的贡献非常巨大。不仅在于对多用户机器来说,Unix是最流行的操作系统,而且在于它是免费软件的基础。另一方面Windows系列是专用系统,由开发操作系统的公司控制接口和设计。因为它对程序设计和用户接口设计建立了严格的标准,和那些开放系统社团完全不一样。一些组织正在试图完成标准化Unix程序设计接口的任务。特别要指出的是Linux完全兼容POSIX.1标准。

linux系统范文第3篇

关键词:Linux 操作系统 教学

由于Linux操作系统与学生熟悉的Windows操作系统在文件和系统管理方式上都存在着较大的差异,Windows操作系统主要采用所见即所得的图形界面管理,而Linux操作系统主要采用简洁、高效的字符界面管理,使得学生在学习过程中感到不适应。同时,由于Linux操作系统中操作命令繁多,且每个命令还有不同的参数设置,更使得不少学生产生了畏难情绪。因此,教师教好这门课程和学生学好这门课程,都不是一件容易的事情。本人根据多年教学实践,针对这门课程的教学内容和教学方法提出了一些观点和教学心得,供大家一起讨论。

1、基于项目驱动教学

项目驱动教学,就是教师与学生通过共同实施一个完整的项目而进行的教学活动。学生在项目实践过程中,理解和掌握课程要求的知识和技能,体验工作的艰辛和乐趣。以项目为中心的项目驱动教学法,它要求根据职业岗位实际需要,将课程知识有机溶入在典型的完整项目中,教学开展是以项目为中心,整个学习过程由项目来驱动,以学生为主体,教师指导、协助,通过项目实施来完成教学。所以可以将课程整合成一个典型实践大项目,在第一节课就给学生展示这个学期要完成的完整项目,激起学生的学习兴趣,并分解项目,让学生知道学习的重点。如教师可以给学生展示一台配置完善的网络服务器,演示和分解其功能,让学生知道学完这门课程能掌握的知识和技能。在日后的教学中,可逐一学项目分解出来的典型小项目,最后再综合完成开课时展示的综合项目。借助这一教学模式,可以充分挖掘学生潜能,为学生走向工作岗位奠定坚实基础,这种方法对提高《Linux操作系统》课程的教学质量有非常好的效果。

2、采用任务驱动教学法

任务驱动教学法为学生提供体验实践的情境和感悟问题的情境,围绕任务展开学习,以任务的完成结果检验和总结学习过程等,提高学生自主学习的积极性,使学生建构探究、实践、思考、运用的学习模式。例如,在学习Linux的常用命令时,首先要激发学生的想象,结合当前企业中的实际情况创设出具体任务。例如,在一台公共服务器上,企业中每个部门的员工都有自己的计算机账户,对自己创建的文件可以进行任何操作,同一部门的员工可以相互阅读,不同部门的员工禁止相互查看。将教学内容的传授转变为学生根据线索提示解决实际问题的过程,然后学生根据实际任务的要求进行创建账号、管理用户、设置文件权限、查看文件等操作,在完成任务的过程中学生学习Linux操作命令,从而掌握教学内容。学生对完成任务产生浓厚兴趣,教学效果显然好于教师按部就班的讲解。

3、提供仿真的Linux系统学习环境

不同的学习环境会导致学生对知识和技能的不同理解。例如,要想学生掌握好Linux操作系统安装的知识和技能,我们提供的是在真实的环境中利用虚拟机(如:VMWare或VPC)仿真安装Linux,从而使学生学习相应的知识和技能。利用虚拟机技术的优点可以任意地增加和删除各种软硬件,这对于高职高专院校的教学来说是一个不错的选择。

4、自编一本合适的教材

对于高职高专院校来说,教材在教学中是起辅助作用的,作为教师可以利用多本教材以及自身的教学和实践经验来编写一本适合于高职高专学生的教材,这样的自编教材可以让学生快速领悟Linux操作系统的安装方法、操作方式、基本使用等。自编教材的内容不易过深,自编教材中应以具体的实践练习项目为主,最好根据职业岗位的实际需要,设计出典型的实践项目。

5、讲解、演示与操作相结合的教学方法

Linux操作系统的学习倾向于系统管理与应用,且知识点多,在教学过程中可以使用多媒体教学,因为多媒体教学能够把枯燥的知识点转化为生动的图像和视听媒体,把教学内容直观化,有利于学生更好地接受知识。在每次教授完新的教学内容后,要趁热打铁,在教师的指导下让学生马上进行练习。因为Linux命令的参数多而复杂,各种网络服务的配置和管理难度较大,学生在对新内容进行练习时,教师能够帮其发现问题并能帮其巩固新知识,达到更好的学习效果,所以强烈建议Linux操作系统的实践教学环节一定要做到教、学、做一体化,故此教学环节应该安排在多媒体网络一体化教室完成。

6、提供丰富的学习工具

要支持学生自主学习,学习环境应该提供给学生学习过程中所需要的学习工具。比如:在Linux操作系统中,利用Mozilla网页浏览器来查看网页,利用OpenOffice.Writer来完成电子作业,利用gFTP来上传电子作业和下载实验指导书,利用Kopete来进行即时通信等。

Linux操作系统作为目前流行的多用户、多任务的网络操作系统,有着开放、稳定、安全、费用低廉等许多其他操作系统无可比拟的优势,具有越来越广泛的应用前景。要做好高职高专院校的《Linux操作系统》课程教学工作,除了以上所论述的几个方面外,还应在实验实训指导书编写、试题库建设和师资培训等方面进行更深入的研究和探索。

参考文献:

[1]谢蓉.Linux基础及应用[M].北京:中国铁道出版社,2011.

linux系统范文第4篇

随着Linux开源系统平台的不断发展,越来越多的开源软件可以提供给Linux用户使用,这样,也使得更多的文件“吞噬”着硬盘空间。作为一种优秀的开源操作系统,如何高效地管理系统中的软件是一个很重要的问题。因此Linux提供了多种方法,用户可以根据实际情况方便地对软件进行管理。比如,它提供了对文件打包的功能,用户可以使用其将若干文件或目录打成一个软件包;同时,它也提供了多种文件压缩工具,使得用户可以对某些文件进行压缩,以减小文件占用的硬盘空间或方便网络传输。

TAR包管理

TAR命令是在Linux下最常用的文件打包工具,可以将若干文件或在若干目录下打包成一个文件,既有利于文件管理,也方便压缩和文件的网络传输。TAR可以为文件和目录创建档案。利用TAR,用户可以为某一特定文件创建档案(备份文件),也可以在档案中改变文件,或者向档案中加入新的文件

TAR命令语法及参数选项

TAR命令使用语法如下:tar [主选项+辅选项] 文件或者目录,其中,主选项是必需的,表明tar命令要完成的操作,辅选项是辅助使用的,可以有也可以没有。下面列出常用的主选项,并简要说明其功能:-A、--catenate、--concatenate表示将若干个tar文件合并成一个tar文件;-c、--create表示创建一个新的tar文件;-d、--diff、--compare表示要比较tar文件或文件系统的不同之处;--delete表示从tar文件中删除文件,但不能删除磁带文件;-r、--append表示在tar文件尾部追加文件;-t、--list表示要显示tar文件内容;-u、--update表示要更新tar文件;-x、--extract,--get表示从tar文件中取出文件。每次使用tar命令时,上述8个命令参数选项必须选择一个,用以指明操作类型。

创建tar文件

创建一个tar文件要使用主参数选项c,并指明创建tar文件的文件名。下面假设当前目录下有smart和xplns两个子目录以及cpuinfo.txt、smart.txt、tar.txt、tar_create.txt四个文件,smart目录下有smartsuite-2.1-2.i386.rpm文件,xplns目录下有xplns-cat-3.3.1-1.i386.rpm,xplns-elm-3.3.1-1.i386.rpm和xplns-img-3.3.1-1.i386.rpm三个文件。若要在该目录下将所有文件打包成gong.tar文件,可以使用如下命令:# tar cvf gong.tar ./*。其中,参数c指明创建tar,参数f指明是创建文件,参数v指明显示处理详细过程。

显示tar文件内容

对于一个已存在的tar文件,用户可能想了解其内容,即该文件是由哪些文件和目录打包而来的,这就要用带t参数的tar命令。例如对于上述产生的gong.tar文件,若欲显示其文件内容,可使用如下命令:# tar tf gong.tar。

从tar文件中取出文件

在已经存在的tar文件中解包,可以使用带主选项参数-x的tar命令实现。下面以gong.tar文件为例,说明带主选项参数-x的tar命令的用法。对当前目录下gong.tar文件解包:#tar -x gong.tar。

常用的压缩工具

Linux下的压缩工具有很多,下面列出Linux下常用的压缩工具及其产生文件的后缀:gzip/gunzip,后缀名为.gz;compress/uncompress,后缀名为.Z;zip/unzip,后缀名为.zip;bzip2/bunzip2,后缀名为.bz2;lha,后缀名为.lzh。Linux下压缩工具中最常用的包括gzip、zip和bzip2三种,下面分别讲述这三种最常用的压缩工具。

gzip压缩工具

对文件进行压缩的目的有两个:一是可以减少存储空间;二是通过网络传输文件时,可以减少传输的网络开销。gzip是Linux最常用的软件压缩工具,在Linux终端输入man gzip命令降显示gzip的帮助文档。该命令的使用形式为:gzip [选项] 压缩或解压缩的文件名。

下面给出使用gzip命令压缩文件的例子,压缩当前目录下的所有文件,并且显示压缩比,显示已经替代原来的文件:#gzip -v *,其中-v参数表明显示压缩比和文件名。需要注意的是,gzip只能对单个文件压缩,不能像Winzip和Winrar一样,可以将多个文件压缩成一个.zip文件或.rar文件。正因为如此,Linux才提供了tar命令,用于将若干文件或文件夹打包成一个文件,然后再压缩成一个.gz文件。接着是解压缩文件的例子,对当前目录下所有压缩的文件解压缩,并列出详细的信息:#gzip -dv *。

另外,显示压缩文件的内容信息:可以用带-l参数的gzip命令显示gz文件的内容。这只是显示文件内容,并不实际解压缩文件:# gzip -l *。

此外,在tar命令中也可以直接嵌入gzip命令,从而直接将若干文件或文件夹处理成一个.tar.gz文件。在这个处理过程中,系统先将若干文件或文件夹打包成.tar,然后将生成的.tar文件压缩成.tar.gz文件。例如将当前目录下所有文件打包并压缩成gong.tar.gz并显示处理进度:# tar cvfz gong.tar.gz ./*。

zip/unzip命令

zip程序位于/usr/bin目录中,可将文件压缩成.zip文件以节省硬盘空间,而当需要的时候又可将压缩文件解开。unzip命令用于将压缩文件解压。zip命令的使用形式为: zip [选项] 压缩后文件名 待压缩文件或文件夹,其中:参数选项表明要完成的操作类型,压缩后的文件名是某个合法的文件名,其后缀为zip,待压缩文件或文件夹指明须要进行压缩的文件或文件夹,可以是多个文件或文件夹。

下面给出使用该命令压缩文件或文件夹的例子。例如将当前目录下的所有文件和文件夹全部压缩成gong.zip压缩文件,-r表示递归压缩子目录下所有文件:# zip -r gong.zip ./* 。用带-v参数选项可以查看zip文件的内容,这点类似于带t参数选项的tar命令。只不过前者用于显示压缩的zip文件的内容,后者用于显示tar文件的内容。与带t参数选项的tar命令类似,带v参数选项的zip命令实际上并不解压缩文件,例如查看gong.zip文件的内容:# zip -v gong.zip。

用带-d参数选项的zip命令可以从zip压缩文件中删除某个文件,而使用带-m的zip命令可以向zip压缩文件添加某个文件。例如删除压缩文件中smart.txt文件:# zip -d gong.zip smart.txt;向压缩文件中gong.zip中添加rpm_info.txt文件:# zip -m gong.zip ./rpm_info.txt。

此外,unzip命令用于扩展名为zip的压缩文件的解压缩,同时,Windows下用压缩软件Winzip压缩的文件在Linux系统下也可以用unzip命令解压缩。unzip命令的语法如下:unzip [参数选项] 压缩文件名.zip。unzip命令的常用用法有:# unzip gong.zip(将gong.zip解压缩到当前目录);#unzip -n text.zip -d /tmp(解压缩当前目录下的text.zip压缩文件,-n参数选项指明不覆盖原有文件,-d /tmp指明将文件解压缩到/tmp目录下);#unzip -v text.zip(显示当前目录下text.zip压缩文件内容)。

bzip2命令

linux系统范文第5篇

// 读取Table.DAT

{

FILE *tab = fopen(TABLE_FILE, "r") ;

// 打开文件

int count = fread(Tab, sizeof(int), TAB_SIZE, tab) ;

fflush(tab) ;

// 刷新文件流

for (int i=0; i

if ( Tab[i] != -1 && Tab[i+1] != -1 )

Tab[i+1] = Tab[i+1] + Tab[i] ;

else

break ;

return TRUE ;

}

int LoadPack()

// 加载数据包

{

int i ;

int load_packs

= 0 ;

FILE *pack = fopen(PACK_FILE, "r") ;

for (i = 0; i < BUF_COUNT; i++)

{

if ( Tab[to_be_load+i] != -1 && Tab[to_be_load+i+1] != -1 )

{

int size = Tab[to_be_load+i+1] - Tab[to_be_load+i] ;

int offset = Tab[to_be_load+i] ;

if ( fread(buf+i, size, 1, pack) != 1 )

{

printf("Read error...\n\n") ;

exit(1) ;

}

load_packs ++ ;

// 更新变量

}

else

{

/* do nothing */

}

}

fflush(pack) ;

// 刷新数据流

to_be_load += load_packs ;

// 更新变量

return load_packs ;

// 返回读取的数目

}

3.4.2 系统中的buffer

在现实中的很多系统中,buffer是很重要的一种思想,为的就是减少读取外部存储的次数,延长设备的使用寿命。Buffer在计算机系统中,应用是很广泛的,例如,在硬盘和内存之间存在一层缓冲区,在CPU和内存之间同样也存在一层缓冲区,这层缓冲区通常被称作Cache。

在本系统中,也同样利用了Buffer思想,有着传统意义上的原因,当然还考虑到用户操作时的特殊性,系统的Buffer思想描述如下:

l

在任意时刻,Buffer内最多存储100个Package数据

l

刚开始,加载pack0 ~ pack99共计100个package,当要查看pack100时,则采取的方法是:保留旧的50个package, 加载新的50个package,则package编号变为:pack50 ~ pack149,这样操作的原因是为了用户的方便,因为用户经常会查看某个报文附近的几个报文。

初始状态下,假设系统已经加载了编号为0到99的数据包,如图2.7所示:

图2.7

加载前缓冲区内容

在某一时刻,假设用户想查看编号为100的数据包,则需要重新加载,重新加载后的数据包如图2.8所示:

图2.8

加载后缓冲区内容

使用此种Buffer思想,用户操作的方便性即体现在这个方面,在对某条报文进行研究时,会经常查看它的临近报文,使用此种机制,那么便不会不断的对要查看的临近报文进行加载,减少了读取硬盘的次数。

3.4.3 系统的显示问题

在控制台上,要想建造一个好的用户操作界面,是一件比较难的事情,根据我的体验,linux下著名的Sniffer工具tcpdump的操作界面也不够友好,普通用户很难操作。在window环境下的Sniffer工具Ethereal界面比较美观,方便操作,所以,建造一个好的用户操作界面成为我此次毕设的攻克重点。

本系统的显示分为两种显示模式:“detail”模式 和 “simple”模式,“detail”模式意为“详细显示模式”,“simple”模式意为“简单显示模式”。

在“detail”模式下,每个包得到尽可能详细的解析,解析包的每一层信息,示意如图2.9:

图2.9

详细显示模式

根据上图显示的信息,可以得知此包是一个ICMP Package,具体内容属于ping Reply,更详细得知是本主机ping本主机的一个数据包。

“simple”模式意为简单模式,所谓简单模式就是对每个Package尽可能的用一句话来描述,虽然尽可能的简短,但是一定要包含以下信息:

l

Package的类型

l

Package的作用

这种模式的重要作用是在用户对包进行检测和测量时,通常会查看相邻的几个Package,这样的模式方便用户进行“查看上一个Package”和“查看下一个Package”,只要用户在这种模式下按“N”或者“n”就可以查看下一个package,只要按“L”或“l”键就可以查看上一个Package。

“simple”模式的示意如图2.10所示:

图2.10

简单显示模式

从图中可以看出,当前正在查看的包用“蓝色”的线条标出,方面用户的操作,当用户向上或者向下进行选择时,此蓝色线条也同样会向上或向下运动,这样做的原因是是的系统显示具有动态效果。

“detail”模式的显示比较简单,只要逐层进行解析就可以了,下面我们主要讨论下“simple”模式下的显示算法。

在“simple”模式下,当前控制台最多可以显示20个Package,主要是由函数List20Packages函数实现的。什么时候应该对Package标上蓝色的线条,以下代码即说明此问题:

if ( i == p_recorder % 20 )

// if the package is the current

printf(COLOR_START) ;

// color_start

无论示在简单显示模式还是在详细显示模式下,均支持以下三种操作:

向上操作(Prev) ----- 查看上一条报文

向下操作(Next) ----- 查看下一条报文

任意操作(Goto) ----- 查看任一条报文

第四章

Sniffer其它相关

4.1 文怎样获取一个数据包?

4.1.1 Libpcap方法

Libpcap 是由洛仑兹伯克利国家实验室编写的Linux 平台下的网络数据包捕获函数库,是一种与系统无关,用于访问数据链路层,是一个独立于系统接口的用户级捕包函数据库,为底层的网络数据提供了可移植框架,它的应用包括网络统计、安全监听、网络调试、性能测量、入侵检测、口令拦截等。Libpcap 可以在绝大多数类Unix 平台下工作,绝大多数的现代操作系统都提供了对底层网络数据包捕获的机制,在捕获机制之上可以开发网络监控应用软件。采用Libpcap 实施网络数据包捕获时,将要用到一个重要的函数pcap_open_live(),它的函数原型是:pcap_t * pcap_open_live(const char *device, int snaplen, int promisc, int to_ms, char *ebuf),其中,如果device 为NULL 或any,则对所有接口捕获,snaplen 代表用户期望的捕获数据包最大长度,promisc 代表设置接口为混杂模式,捕获所有到达接口的数据包,但只有在设备给定的情况下才有意义,to_ms 代表函数超时返回的时间。

编程要点如下:

l

查找可以捕获数据包的设备

device = pcap_lookupdev(errbuf);

l

创建捕获句柄,准备进行捕获

p =pcap_open_live(device, 8000, 1, 500, errbuf);

l

如果用户设置了过滤条件,则编译和安装过滤代码

pcap_compile(p, &fcode, filter_string, 0, netmask);

pcap_setfilter(p, &fcode);

l

进入循环,反复捕获数据包

for( ; ; )

while((ptr = (char *)(pcap_next(p, &hdr))) == NULL);

l

对捕获的数据进行类型转换,转化成以太数据包类型

eth = (struct libnet_ethernet_hdr *)ptr;

l

对以太头部进行分析,判断所包含的数据包类型,做进一步的处理

if(eth->ether_type == ntohs(ETHERTYPE_IP))

if(eth->ether_type == ntohs(ETHERTYPE_ARP))

l

关闭捕获句柄

pcap_close(p);

4.1.2 Socket方法

在Linux 下编写网络包捕获程序,比较简单的方法是在超级用户模式下,利用类型为SOCK_PACKET 的套接口(socket函数)来捕获链路帧。Linux SOCK_PACKET 编程要点如下:

l

设置套接口以捕获链路帧:在设置套接口之前,需要引用如下文件:

#include

#include

#include

#include

调用socket 函数的原型是:int socket(int domain, int type,int protocol);

本函数涉及3 个输入参数:domain 参数表示所使用的协议族;type 参数表示套接口的类型;protocol 参数表示所使用的协议族中某个特定的协议。如果函数调用成功,套接口的描述符(非负整数) 就作为函数的返回值,假如返回值为-1,就表明有错误发生。使用socket 函数捕获链路层数据帧,domain参数应指定为AF_INET 协议族,表示采用Internet 协议族;type参数指定为SOCK_PACKET,表示获取链路层数据,进而分析各层的协议数据单元;而protocol 参数采用htons(0x0003),表示可以截取所有类型的数据帧。这里htons 函数用于短整数的字节顺序转换。计算机数据存储有两种字节优先顺序:高位字节优先和低位字节优先。Internet 上数据以高位字节优先顺序在网络上传输,所以对于在内部是以低位字节优先方式存储数据的机器,在Internet 上传输数据时就需要进行转换,否则就会出现数据不一致。在捕获数据包时socket 函数调用形式为:

int fd;

// fd 是套接口的描述符

fd=socket(AF_INET, SOCK_PACKET, htons(0x0003));

l

设置网卡工作模式:要使建立的套接口能够真正捕获到同一网段其它站点的数据,还必须设置网卡工作于“混杂”模式,可以使用ioctl 函数,原型如下:

int ioctl(int d, int request,&ifr),ioctl 系统调用用于对套接口、网卡等软硬件设施进行底层控制,实际的操作来自各个设备自己提供的ioctl 接口。设置网卡于“混杂”方式的Linux C 程序段如下:

struct ifreq ifr;

strcpy(ifr.ifr_name, dev);

//(char *)dev 标识设备名,如:eth0

i=ioctl(fd,SIOCGIFFLAGS,&ifr); // 表示要求取出工作方式

if(i

{

close(fd);

perror("can't get flags\n");

exit(0);

}

ifr.ifr_flags |= IFF_PROMISC;

//在标志中加入“混杂”方式

i=ioctl(fd,SIOCSIFFLAGS,&ifr);

// 表示要求设定工作方式

if(i

{

perror("can't set promiscuous\n");

exit(0);

}

l

从套接口读取链路帧:套接口建立以后,就可以从中循环地读取链路层数据帧。因此,还需要建立数据帧的缓冲区,并把帧头结构的指针指向这一缓冲区的首地址:

char ep[ETH_FRAME_LEN]; struct ethhdr *eh; int fl;

eh=(struct ethhdr *)ep;

// 指向帧头

fl0 = read(fd, (etherpacket *)ep, sizeof(ep)) ;

//fl0 为截取的数据帧帧长

这里帧头结构类型ethhdr 在/usr/include/linux/if_ether.h 中

定义:struct ethhdr {unsigned char h_dest [ETH_ALEN]; //目标MAC 地址

unsigned char h_source[ETH_ALEN];

`

//源MAC 地址

unsigned short h_proto;

//帧中数据协议类型代码

}

基于上述定义,一旦ep 读入帧中数据,就可以通过eh->h_dest、eh->h_source、eh->h_proto 获取帧首部信息。

4.2 怎样解析一个报文?

无论采用Lipcap 方法,还是采用SOCK 方法,都可获得以太网帧,由于在以太网帧首部中含有协议类型字段,所以可进一步实现上层协议包的首部提取,为篇幅起见,本处仅对Socket方法获得帧为例,介绍TCP/IP 首部的提取的一般方法,以便今后作进一步的数据分析与处理。

IP 报头首部提取

根据h_proto 的值,可以确定帧数据将交由上层何种协议处理,常见的h_proto 值与协议的对应关系有:

0x0800:IP协议;

0x0806:ARP 协议;

0x8035:RARP 协议。

因此,一旦捕获的帧中h_proto 的取值为0x800,将类型为iphdr 的结构指针指向帧头后面负载数据的起始位置,则IP 信包首部的数据结构将一览无余。以下程序段表明这一定位过程:

char ep[ETH_FRAME_LEN];

struct ethhdr * eh;

struct iphdr *ip;

int fl;

eh=(struct ethhdr *)ep;

// eh 指向帧头

ip=(struct iphdr *)((unsigned long)ep + ETH_HLEN);

// ETH_HLEN为帧长

fl1=read(fd, (struct erhhdr *)ep, sizeof(ep));

//fl1为捕获的数据帧长

printf("saddr:%x =>daddr:%x\n",ip->saddr, ip->daddr); //取源和目标IP 地址

TCP 报文段首部提取

在IP 协议首部中包含协议数据单元类型标识域:_u8 protocol;这一标识域的常见取值及其协议对应关系如下:

1:ICMP;

6:TCP;

17:UDP。

因此,如果IP 报头的协议域取值为6,那么紧跟在IP 报头之后就是TCP 报头。IP 报头的长度可以通过ihl 域取得。这样,假如缓冲数组ep 存放捕获到的以太网数据帧,iph 是指向其中IP 基本报头结构的指针,而tcph 是指向TCP 报头结构的指针,那么,定位tcph=(struct tcphdr *)(((unsignedlong)ep)+ETH_HLEN+ iph->ihl*4),TCP 报头的结构信息就存放在*tcph 中,并可通过以下语句获取相关信息:

fl2=read(fd, (struct ethhdr *)ep, sizeof(ep));

// fl2 为捕获的数据帧帧长

printf("source=%x,dest=%x\n",tcph->source,tcph->dest); //取源端口和目的端口号

4.3 怎样把网卡置为“混杂模式”?

在以太网中,通过广播实现数据传输,在同一子网段的所有网卡都可“听”到网络总线上传输的所有数据,但不是所有数据都能被接收到。在系统正常工作时,一个合法的网络接口只响应两种数据帧:帧的目标MAC地址与本地网卡地址相符;帧的目标地址是广播地址,除此之外数据帧将被丢弃。

由于网卡有4 种工作模式:广播(能够接收网络中的广播信息)、组播(能接收组播数据)、直接(只有目的网卡才能接收该数据)和混杂(能够接收一切数据)模式,所以为了能够捕获以太网所有数据包,通常需要将网卡设置成混杂工作模式。当主机连接在共享型以太网集线器上时,采用“混杂”方式可以捕获到同一冲突域上传输的数据帧;但当主机连接在交换机上时,由于交换机通常不会将数据帧广播到所有端口上(除非在其MAC 地址——端口映射表内找不到相应表项),因而不能利用以太网络的广播特性进行捕获。这时,可以利用交换机的端口镜像功能实现网络数据包捕获。因为当端口A 和端口B 之间建立镜像关系后,流经端口A 的所有信息流量将同时通过端口B 输出,所以可以在端口B 捕获到端口A的数据。

所以,要想运行Sniffer工具,执行“侦听”功能,就必须使得网卡处于“混杂模式”,把网卡置为“混杂模式”的代码如下:

BOOL SetPromis()

{

int fd ;

fd = socket(AF_INET, SOCK_PACKET, htons(0x0003) ) ;

if ( fd == -1 )

{

printf("Can Not Establish A Socket To Control The Card...\n\n") ;

return FALSE ;

}

struct ifreq ifr ;

strcpy(ifr.ifr_name, "eth0") ;

int i = ioctl(fd, SIOCGIFFLAGS, &ifr) ;

if ( i < 0 )

{

close(fd) ;

printf("Can Not Get Flags Of The Net Card...\n\n") ;

return FALSE ;

}

ifr.ifr_flags |= IFF_PROMISC ;

i = ioctl(fd, SIOCSIFFLAGS, &ifr) ;

if ( i < 0 )

{

printf("Can Not Set The Net Card Promiscuous...\n\n") ;

return FALSE ;

}

printf("Set The Card To Be Promiscuous..............OK\n\n") ;

return TRUE ;

}

4.4 Sniffer攻击的防范

Sniffer软件可以进行网络流量监控、拓扑发现、入侵检测,给网络管理带来了极大的便利。正由于它能被动获取网络传输的明文信息,因此,一旦被黑客利用,给网络带来的危害也是巨大的。

作为一种入侵手段,嗅探器令人防不胜防,因为它被动接受而不主动获得。它不会向网络上发出任何包,网络用户很难发现它的存在。到目前为止还没有一种比较好的防范手段。防范 Sniffer攻击,只能依靠用户和网络软件设计者的安全意识。我们知道,FTP, Telnet等软件都是进行明文传输,因此,对攻击者来说,他们传输的信息就等于完全暴露出来。因此,必须对传输的数据进行加密,这也是反嗅探器的唯一途径。在Linux系统中,我们主张用SSH和openSSH来对传输数据进行加密。这样即使攻击者能得到数据流,也不能得到具体信息了。

另一种防范嗅探攻击的方式就是检查网络中有无网络接口处于混乱模式。在Linux环境下可以用ifconfig来检钡本地机器是否处于混乱模式,ifconfig是Linux自带的工具。对于子网中网络接口的检测,可以使用NEPED工具。然而该工具是利用Linux的ARP实现中的缺陷来检测这些接口口它发送一个ARP请求,一次来引起嗅探工作站的响应。然而它本身就是一个缺陷,因为它是利用了Linux的其它缺陷来实现的。随着Linux系统的越来越完善,如果ARP实现得到修补,嗅探工作站不再响应ARP请求。

另外,安全的拓扑结构也是必要的,因为嗅探器只能在当前网络段上进行数据捕获。这就意味着,将网络分段工作进行得越细,嗅探器能够收集的信息就越少。

以上讨论了目前对嗅探攻击防范的困难,对此本人作出下列两点设想:

l

因为以太网在局域网中进行传输是使用广播方式,如果不采用这种方式,直接使用地址解析 ((ARP)影射物理地址,嗅探器就无法接收数据了。或者进行双向验证,即主机对数据需要检查,数据对主机也需检查。

l

由于进行原始数据接收时需要将网卡设置为混乱模式,但如果网卡不

提供这种模式,嗅探器也无法工作了。另外,前面提供的两种检测网卡是否处于混乱模式的方式都有缺陷,希望以后能研究出没有缺陷的检测网卡状态的方式。

4.5 Sniffer引入网络管理中的可行性

Sniffer作为能够捕获网络报文的设备,通常用来在网络上截取阅读位于OS工协议模型中各个协议层次上的数据包。Sniffer可以拦截所有的正在网络上传送的数据,通过相应的软件分析处理,对网络实时信息和历史信息进行监控和统计分析,进而分析子网的网络状态和网络整体布局。为网络性能的分析、网络故障的判断、信息流量的审计、配置管理得调整、网络安全的检测提供强有力的使用工具,对网络管理提供信息依据。

Sniffer可以在网络管理中实现的主要的功能:

实时网络包捕获:Sniffer能够以线速率实时捕获用户定义的网络数据包截获通信的内容。对网络上主机间的通信,通过设置过滤条件,给出一个详细的逐包的统计信息。

网络实时监控:Sniffer以表格、图形等形式,实时显示出网络运行情况,如协议分布、流量分布、带宽利用率、错误率等。

对协议进行解析:有些只能分析一种协议,而另一些能够分析几百种协议。

统计历史数据和发出警报:Sniffer可提供几十种长期数据报告,以便将来的历史查询和分析,并可根据预先设定的阀值发出事件警报。

报文发送:通过设置目的地址,发送次数,发送延迟和报文大小,形成报文并发送,可以实现网络流量模拟。

4.6 Sniffer技术在网络管理中开发的可行性与必要性

根据以上各章节的论述,我们大致了解了网络管理技术和Sniffer技术的基本概念,在Sniffer本身所具有的抓取网络数据报的特性的基础之上,首先产生了一些简单的Sniffer的工具,其后Sniffer技术融合其他方面的技术,包括:人工智能、数据库、分布式等技术,在网络管理领域得到了极大的发展,在不同网络类型、不同操作系统中都得到了或多或少的应用,形成了各种专用的或通用的Sniffer产品,从简单捕获400字节数据包的Sniffit工具到集成的功能强到的具有 Sniffer网络管理性质的 TVN商业软件。从研究和实际应用上说明Sniffer技术在网络管理中是一种行之有效的技术。

由于现有网络管理工具的存在,许多人认为没有自己再开发网络管理软件的必要了。事实上,这种观念是不正确的。因为:尽管现有的网络管理工具提供了强大的网络管理功能,但它不可能包罗万象,适合于任何情况。也基于这个原因,很多的网络管理平台提供了API,可以使第三方或客户进行二次开发。这虽然使得网络管理工具的开发容易了许多,但前提是要掌握网络管理的深厚的专业知识。功能强大的网络管理工具其使用相应也较为复杂,而客户使用可能只关心自己想要实现的功能,而不迷失于相对无必要的复杂的功能环境中,同时希望减少管理负担,减少培训、操作和维护的费用。另外优秀的网络管理工具的价格也是很昂贵的,微小型企业可能无法承受。

因此Sniffer技术在网络管理中的开发应用有着很大的必要性。ShuSniffer是我们自主开发的具有独立版权的软件产品。它是针对广播信道网络环境下的企事业单位局域网而专业设计的一套小巧、可靠、操作简便的计算机网络诊听分析软件。它主要依靠信息在局域网中传播的广播方式,捕获信道上的报文,进行一系列特定分析,提取出实用数据提供给用户作为参考。并且把数据存入数据库,提供历史查询。它可以模拟网络报文传输,以及对截获的报文进行深层次的分析,了解报文的具体内容。它实现的主要功能包括:网络实时监视、报文捕获与分析、报文发送、历史查询、系统配置,为网络健康性能状态的分析、调整提供强有力的实用工具,成为计算机网络管理体系中的重要组成部分。

4.7 Sniffer对多协议的捕捉和分析的不足

当前Sniffer技术的应用还十分简单,对复杂多协议的捕获和分析也有很大的缺陷。从推广Sniffer技术的企业来看,Sniffer因要十分具体的应用于某个领域,因此只能做到对某个特定协议集做到精确专业的分析口而今天的网络通常由多个网段经过路由器、网桥、交换机和WAN链路组成。任何一个网段都可能运行多种网络协议。例如,TCP/IP协议与局域传输协议(如Novell的IPX)一起用于连接企业范围网络的协议。对于某些商业站点,可能同时需要运行多种协议簇— NetBEUI, IPX/SPX, TCP/IP, 802.3和SNA等,每个协议簇中又包括多种具体应用协议。这时很难找到一种Sniffer帮助解决网络问题,因为许多Sniffer往往将某些正确的协议数据包当成了错误数据包,然而我们要想解决复杂的网络问题,通常需要详细地解析各协议数据包内容。

在实际应用中,现有的Sniffer软件管理工具通常只能对单个协议或少数的协议进行捕获,例如Sniffer工具软件不能检测诸如HTTP和FTP之类的应用协议。这在工nterne七八ntranet环境中对网络的有效管理是一个大缺陷。所以Sniffer应该有对多种协议的捕获和分析能力,包含了目前最热门的W49W所使用的通讯协议.提供广泛且详尽的协议解析,使Sniffer成为一个功能齐全,完全透视网络的强大网络管理工具。

参考文献

[1] Tim Berners-Lee,James Handler,Ora Lassia.The semantic web[J].Scientific American, 2001,284(5):34-43.

[2] W3C Recommendation 10 February 2004.OWL web ontology language guide [EB/OL]. 2004

[3] Robert Shimonski, Sniffer Network Optimization and Troubleshooting Handbook. Syngress Media, 2002.6.

[4] Douglas E.Comer. Internetworking with TCP/IP, Vol 1. 5th Edition.

United States :Prentice Hall ,2006:90-200.

[5] W.Richard Stevens. TCP/IP Illustrated, Vol 1: The Protocols. United States: Addison-Wesley,2004:70-150.

[6] 李景.本体论在系统中的应用研究[M].北京:北京图书馆出版社, 2005.

[7] 谭思亮,监听与隐藏网络侦听揭密[M].北京:人民邮电出版社,2002.

[8] 肖新峰,宋强. TCP/IP 协议与标准教程. 北京:清华大学出版社,2007:1-115.

[9] 杨延双. TCP/IP 协议分析与应用. 北京:机械工业出版社,2007:60-148.

[10] 兰少华,杨余旺,吕建勇. TCP/IP 网络与协议. 北京:清华大学出版社,2006:1-110

[11] 李景.本体论在文献检索系统中的应用研究[M]. 北京:北京图书馆出版社, 2005. 70-150

[12] 朱礼军,陶兰,黄赤.语义万维网的概念、方法及应用[J].计算机工程与应用, 2004,40(3):79-83

[13] 任彬.一种特定领域的语义网模型[D].吉林:吉林大学, 2004.

[14] 田春虎.国内语义Web 研究综述[J].情报学报,2005,24(2):243-249.

[15] 杜小勇,李曼,王大治.语义Web与本体研究综述[J].计算机应用, 2004,24(10):14-16.

[16] 周武,金远平.构建XML 本体信息研究[J].微机发展, 2003,13(10):61-64.

[17] 马恒太,蒋建春.一个基于Uuix 平台的分布式网络监视器系统[J].计算机研究与发展, 2001,38(3):268-274.

[18] 李力,肖庆.Linux 下GUI 网络数据包嗅探器的研究与实现[J].计算机工程与设计, 2006,27(2):344-346.

相关期刊更多

昆明理工大学学报

北大期刊 审核时间1个月内

云南省教育厅

物理化学学报

SCI期刊 审核时间1-3个月

中国科学技术协会

中国服饰

部级期刊 审核时间1个月内

中华人民共和国教育部