zoukankan      html  css  js  c++  java
  • 《信息安全系统设计基础》第九周学习总结

    这周由于自己的原因,周五离校,现在刚站脚,到周一上午可能都会有点事,小小事。但是一定不会耽误考试。东西写得匆忙,见谅,周一我在完善。

    上一篇链接:http://www.cnblogs.com/20145207lza/p/6052573.html

    1.  who

    who命令是查询当前登录的每个用户,输出包括用户名、终端类型、登录日期及远程主机。

    man一下who,可以看到,who命令是读取/var/run/utmp文件来得到信息的。

    man一下utmp,知道utmp这个文件,是二进制文件,里面保存的是结构体数组,这些数组是struct utmp结构体的。

    伪代码

    - 打开记录所在文件:utmp

    - 将文件中的记录逐条读取

    - 每一条读取的记录都要在屏幕上打印

    - 关闭文件

    问题

    解决对齐问题:

    • 对齐的问题很好解决。我使用的是 制表符来排的,但是由于user的长度不一,导致错位,可以换成固定长度,不足补0的方法显示。

                           

    解决时间显示问题:

    • 使用man查找与time格式化相关(这一部分改了好久,最后还是去网上搜索的编写who的相关内容、time的相关内容才得以解决)
    • 判断应该是strftime,进入查看用法,继续修改try_who代码

     

    • 这个警告应该是64位机的问题,运行之后和第一次的问题一样显示核心已转储,但是我到现在都不知道怎么在原句上解决。

     

    解决显示记录多的问题:

    • 问题原因:utmp中保存的用户,不仅仅是已经登陆的用户,还有系统的其他服务所需要的,所以在显出所有登陆用户的时候,应该过滤掉其他用户,只保留登陆用户。在utmp结构中的ut_type可以区别,登陆用户的ut_type是USER_PROCESS。

    改进

    • 在打开和关闭文件的时候加上失败情况处理。

    我的代码

    #include <stdio.h>

    #include <stdlib.h>

    #include <unistd.h> //read

    #include <sys/types.h>  //open

    #include <sys/stat.h>

    #include <fcntl.h>

    #include <utmp.h>   //utmp

    #include <time.h>   //strftime

    int main()

    {

        struct utmp record;

        int fd;

        int len = sizeof(record);

        struct tm *p;

        time_t t;

        char fortime[40];

        if ( (fd = open(UTMP_FILE, O_RDONLY)) == -1 )

        {

            perror( UTMP_FILE );   

            exit(1);

        }

        while(read(fd,&record,len))

        {

            if(record.ut_type == USER_PROCESS)

            {

                printf("%-10.10s",record.ut_user);

                printf("%-10.10s",record.ut_line);

                t = record.ut_time;    

                p = localtime(&t);

                strftime(fortime,40,"%F %R",p);

                printf("%12s",fortime);

                if(record.ut_host[0]!='');

                    printf(" (%s)",record.ut_host);

                printf(" ");

            }

        }

       

        if (close(fd) == -1)

        {

            perror( UTMP_FILE );   

            exit(1);

        }

        return 0;

    }

    2.fileinfo

    • 这个功能用来实现显示文件信息

    mode:st_mode        文件的类型和存取的权限        

    links:st_nlink      连到该文件的硬链接数目,刚建立的文件值为1

    user:st_uid         用户ID

    group:st_gid        组ID         

    size:st_size        文件字节数

    modtime:st_mtime    最后一次修改时间

    name:               输入的文件名

    3.setechoechostate

    • setecho用来改变输入指令是否可见。
    • 输入y(或是以y开头的一串字符),命令可见

    否则(即输入不以y开头的字符),命令不可见

    • echostate显示输入命令是否可见。
    • echo is on:命令可见

    echo is off:命令不可见

  • 相关阅读:
    NSUserDefaults 简介,使用 NSUserDefaults 存储自定义对象
    OC,查找字符串2在字符串1中出现的次数
    iOS开发知识碎片----01
    iOS中pch文件的应用
    UIKit性能调优实战讲解
    尽量将View设置为Opaque,iOS开发技巧
    Xcode开发技巧之code snippets(代码片段)
    【工具】openwrt安装记录
    【对象模型】C++模版的编译链接过程——编译器真的会检查所有tocken层面的错误么?
    【转】利用TCMalloc优化Nginx的性能
  • 原文地址:https://www.cnblogs.com/20145207lza/p/6056976.html
Copyright © 2011-2022 走看看