第一范文网 - 专业文章范例文档资料分享平台

LINUX实验指导书新 (2)

来源:用户分享 时间:2020-06-20 本文由搞怪之王 分享 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

如果运算结果与/etc/shadow所存储的加密后的口令相同,则口令被猜出来。 步骤5:用c语言编写实现口令检查的程序 关键部分的代码如下:

通过读取/etc/shadow的每一行,获得一个关于用户的数据结构,存放在pwd中。

char saltstr[21]; //存放种子,最多是20个字节 bzero(saltstr,sizeof(saltstr));//将变了全部清0

strncpy(saltstr,pwd->pw_passwd,20);

//将salt取出,最多20个字节,以其中$作为边界

cp = crypt (guess, saltstr); //调用crypt加密函数

if (strcmp (cp, pwd -> pw_passwd)) //与口令文件中存储的信息比较 return (0); //若不一致则返回

printf (\

pwd -> pw_name, guess); //找到口令,显示口令

步骤6:编译程序

gcc –o passchk pass.c –lcrypt

其中-o选项指定编译后的可执行文件名,-l选项表示使用crypt函数库

步骤7:执行口令检查程序

./passchk –P myshadow –w words –p

其中passchk是可执行文件名,myshadow是口令文件,如果没有-P选项,则缺省使用Linux系统的/etc/shadow文件,words是存放弱口令的口令字典文件,选项-p表示将破解后的口令输出。

实验5

目的:练习Gtk+编程和gcc工具的使用。

需要的知识:C/C++语言的基本技能、第12章gcc的使用与开发、第13章Gtk+图形程序设计;

题目:日志的查询统计是系统管理的一项重要任务。Linux系统的日志以文本文件的形式存在,使用Gtk+编写一个图形界面的系统日志管理器(针对日志文件/var/log/messages*),它可以列出系统当前的日志个数(/var/log/message, /var/log/message.1, /var/log/message.2,……共多少个),对指定的日志文件可以查询哪些条目含有(include)指定信息(比如含有“succeed”的条目),哪些不含有(exclude)指定信息。

图5-1是一个示例程序的效果图:

? 数字1为一个标签,显示日志文件的数量;

? 显示succeed的单行文本框用来输入包含的指定信息; ? 显示kernel的单行文本框用来输入不包含的指定信息;

? 点击标签为“/var/log/messages”的按钮后,可以选择日志文件; ? 点击标签为“View”的按钮后,可以根据输入的条件查看日志内容; 下面的多行文本框用来显示日志内容。

图5-1程序效果图

程序目录结构如图 5- 1所示:

Util.h,Util.cpp core/ LogRecord,LogRecord.cpp LogContent,LogContent.cpp 当前目录./ widgets/ widget.h,widget.cpp main.cpp 图 5- 1程序目录结构图

其中:

? 文件main.cpp:为程序的主函数所在文件,通过对其它文件的调用启动和结

束程序;

? 目录core:其中的文件分为三组,每一组的一个.h文件和一个.cpp文件共同

定义了一个类,其中的类名和对应的文件名相同。目录core下定义的类实现了与界面无关的大部分功能。包括:检索日志文件个数、检索和根据条件过滤日志内容等作用。

? 目录widgets:包括两个文件,实现程序界面,并和目录core下的类交互,

利用图形界面接收用户的输入和显示程序的运行结果。 实现步骤:

1) 根据目录结构创建目录和文件;

为了方便组织程序代码,可以将本实验的代码放到单独的目录下。因此,先建立一个目录作为项目的根目录,本例中根目录命名为:ViewLogGtk。

? 在当前工作目录下,建立项目根目录:mkdir ViewLogGtk ? 进入根目录:cd ViewLogGtk

? 创建空白主程序文件:touch main.cpp ? 创建目录core:mkdir core

? 创建目录widgets:mkdir widgets ? 进入目录core:cd core

? 创建目录core下的空白程序文件: touch Util.h touch Util.cpp

touch LogRecord.h touch LogRecord.cpp touch LogContent.h touch LogContent.cpp

? 进入目录widgets:cd ../widgets

? 创建目录widgets下的空白程序文件: touch widget.h touch widget.cpp ? 目录文件创建完毕。

2) 编辑并实现代码文件:这里仅给出关键部分的代码。 Util.h定义了类Util:

Util.h 1 #ifndef UTIL_H 2 #define UTIL_H 3 class Util{ 4 public: 5 static int queryFileCount(const char* dir,const char* keyword); 6 }; 7 #endif 类Util中只定义了一个静态的方法:queryFileCount()用来查询指定目录下指定类型的文件个数。其中方法的第一个参数为指定查询文件的目录,第二个参数为指定文件名中包含的字符串。对于本例,第一参数固定的传入字符串“/var/log/”,第二个参数固定的传入字符串“message”,即查询目录/var/log/下文件名中包含message的文件。

LogRecord.h 1 #ifndef LOGRECORD_H 2 #define LOGRECORD_H 3 #include 4 using namespace std; 5 class LogRecord 6 { 7 private: 8 string contents; 9 public: 10 LogRecord(char* contents); 11 ~LogRecord(void); 12 string getContents(void); 13 LogRecord(string contents); 14 }; 15 #endif 类LogRecord代表日志中每一行。构造函数LogRecord(char*)和LogRecord(string)分别提供了利用char*类型和string类型形成日志行记录的两种方法。其中私有字符串成员contents储存日志记录的一行字符串,公有方法getContents()对外提供了一个获得字符串记录内容的接口。 LogContent.h 1 #ifndef LOGCONTENT_H 2 #define LOGCONTENT_H 3 #include 4 #include 5 #include\6 using namespace std; class LogContent { private: string contains; //记录中需要出现的关键字 string notcontains; //记录中不能出现的关键字 string file_name; //记录文件名 list records; //符合过滤条件的记录集合 public: LogContent(void); ~LogContent(void); void setFilter(string contains, string not_contains); //设置过滤条件 18 void set_file_name(string file_name); //设置检索的日志记录文件名 19 int fill_records(void); //根据文件、过滤条件填充记录集合 20 private: 21 int filter_record(LogRecord record); //判断记录行是否满足过滤条件 22 public: 23 list get_records(void); //得到记录集合 24 }; 25 #endif 类LogContent是检索日志文件、过滤日志行记录的主要场所。它利用setFilter(string,string),设置日志行记录中必须出现的关键字和必须不出现的关键字,利用set_file_name(string)设置日志文件的文件名称。检索关键字和日志文件设置完毕后,就可以利用fill_record()检索日志文件并填充日志行记录集合。填充完毕,可以使用方法get_recore()得到检索的结果。 widget.h 1 #ifndef WIDGET_H 2 #define WIDGET_H 3 #include 4 #include 5 #include 6 #include \7 using namespace std; 8 //fields 9 string file_name; //日志文件名 10 string kw_contains; //日志过滤条件中,需要包含的关键字 11 string kw_not_contains; //日志过滤条件中,不需要包含的关键字 12 int file_num; //指定目录下,特定文件的个数 13 GtkWidget* window; //主界面窗口 14 GtkWidget* lbl_file_num; //文件个数标签 15 GtkWidget* btn_choose_file; //选择文件按钮 16 GtkWidget* btn_view; //查看日志文件按钮 7 8 9 10 11 12 13 14 15 16 17

搜索“diyifanwen.net”或“第一范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,第一范文网,提供最新医药卫生LINUX实验指导书新 (2)全文阅读和word下载服务。

LINUX实验指导书新 (2).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/wenku/1087989.html(转载请注明文章来源)
热门推荐
Copyright © 2018-2022 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top