python gevent模块 下载_【python安全攻防】包、模块、类、对象

终于又到了一周一度的整理博客的时间了,博主平时课余时间看书,周末统一整理,坚持周更真是爱了爱了 ~


今天要说的是python面向对象这一部分的内容,今天这是基础篇的第二篇,也是最后一篇。

说来基础篇还真是少呢,第一篇说了一下函数部分比较难理解的闭包和装饰器,今天说一下模块、包、对象、类这部分。当然中途还有很多东西也很重要啊。

  1. 基础语法:尤其是字符串、列表和字典的操作,以及循环、判断的使用
  2. 文件处理:主要是文件的读写
  3. 异常处理:因为我们前期写的顶多就是些小脚本,辅助渗透用,没必要了解太多异常处理

这三部分,有一点编程基础的,网上找篇博客随便看看就能懂,不会的等遇到了直接百度,也比我现在写篇博客节省时间,所以就没写,但是我肯定都看了,哈哈。

因为平时渗透过程中,我们经常会用到别人写的脚本,或者使用渗透测试框架时也需要自己动手写POC/EXP之类的,甚至以后可能会自己写一些python脚本,所以python的函数、对象等等这部分内容是非常重要的。

我希望今天这部分结束后,我们至少可以做到能读懂别人的脚本,于是我就去随便下了一个dirmap,等下在文章最后,大家和我一起读一下源码!

v2-16abdf3685204b4735ad623ce823bf47_b.jpg

那废话不多说,开始今天的内容,包-> 模块-> 类-> 对象-> 方法,咦?为什么加个箭头呢?因为它们的关系确实如此:

  1. 模块:就是.py文件
  2. 包:就是一群.py文件所在的目录
  3. 类:狗就是一个类
  4. 对象:对象就是类的实例化,比如哈士奇、金毛、阿拉斯加
  5. 方法:实现具体逻辑的代码

v2-dbc589abfb4c4cf29ed57fd69e6549b5_b.jpg

如果一个目录下是一堆python文件,且其中有一个__init__.py的话,那这个目录就是,且目录名称就是包名

我们可以使用import导入包/模块:

# 导入包
import [包名1],[包名2]# 导入模块
from [包名] import [模块名1],[模块名2]

模块

一个python文件就是一个模块,且文件名就是模块名

我们可以使用import导入模块/函数

# 导入模块
import [模块名1],[模块名2]# 导入函数
from [模块名] import [函数名1],[函数名2]

从类开始,就是代码层面的了,类具体定义如果不知道的建议学一门面向对象的语言,这玩意解释起来太多了,网上文章也太多了,我不想写。

放一段最基本的python代码,先抛开面向对象编程的思想:声明一个类,里边有个方法,用来打印一句话

# 先声明一个Test类
class Test():def print_test(self, perm):print(perm)# 实例化一个test对象
test = Test()# 调用print_test方法
test.print_test('白帽子续命指南')

执行结果

白帽子续命指南

对象

对象就是对类的实例化,具体语法格式如下:

# 对象名 = 类名()
test = Test()

方法

就是实现具体功能的代码

在类里边写它的主要逻辑,注意写的时候要加上self参数,这个必须加(除了类方法和静态方法,这两个不讨论)。语法格式为:

class Test():def print_test(self, perm):print(perm)

创建一个实例对象之后,可以调用,调用格式:

# 对象名.方法名(参数)
test.ptint_test('白帽子续命指南')

除此之外,方法也分很多种,比如带下划线的,还有类方法、静态方法等等,这里不细说,遇到了再去百度。简单说三种:

  1. 前边有两个下划线的:私有的,只有类自己可以访问,连子类都不能访问
  2. 前边有一个下划线的:保护变量,只有类和子类能访问,言外之意就是不能import
  3. 左右各两个下划线的:系统的

继承

继承就是子类和父类那一块的,语法格式为:

# 父类
class Cat():pass
class Animal():pass# 子类
class Kitty(Cat, Animal):pass

这样,Kitty这个类就继承了Cat和Animal这两个类的所有属性和方法(属性就是变量)。

重写

重写就是继承一个父类后,对父类中某个方法重新写一下。

语法上保证方法名和参数列表都一样,就OK了:

# 父类
class Cat():def print_cat(self):print('喵~')
class Animal():def print_live(self):print('活的')# 子类
class Kitty(Cat, Animal):def print_live(self):print('死了')test = Kitty()
test.print_live()

执行结果

死了

读源码

项目地址:https://gitee.com/c0ny10/dirmap

首先,下载好dirmap的源码后,进入到dirmap/中,看看都有什么。

.
├── LICENSE
├── README.md
├── README_EN.md
├── data
│   ├── crawl_mode_suffix.txt
│   ├── dict_mode_dict.txt
│   ├── dictmult
│   │   ├── BAK.min.txt
│   │   ├── BAK.txt
│   │   └── LEAKS.txt
│   ├── fuzz_mode_dir.txt
│   ├── fuzz_mode_ext.txt
│   ├── fuzzmult
│   │   ├── fuzz_mode_dir.txt
│   │   └── fuzz_mode_ext.txt
│   └── user_agents.txt
├── dirmap.conf
├── dirmap.py
├── doc
│   ├── blast_mode.png
│   ├── crawl_mode.png
│   ├── dict_mode.png
│   ├── dirmap.png
│   ├── donate.jpg
│   ├── fuzz_mode.png
│   └── recursive_scan.png
├── lib # 想这个lib/下面有__init__.py,说明这个就是一个包啊
│   ├── __init__.py
│   ├── controller  # 这也是包
│   │   ├── __init__.py
│   │   ├── bruter.py   # 这就是所谓的模块
│   │   └── engine.py
│   ├── core
│   │   ├── __init__.py
│   │   ├── common.py
│   │   ├── data.py
│   │   ├── datatype.py
│   │   ├── enums.py
│   │   ├── option.py
│   │   └── setting.py
│   ├── parse
│   │   ├── __init__.py
│   │   └── cmdline.py
│   ├── plugins
│   │   ├── __init__.py
│   │   └── inspector.py
│   └── utils
│       ├── __init__.py
│       ├── config.py
│       └── console.py
├── requirement.txt
└── thirdlib├── IPy│   ├── AUTHORS│   ├── COPYING│   ├── ChangeLog│   ├── IPy.py│   ├── MANIFEST.in│   ├── Makefile│   ├── README│   ├── example│   │   ├── confbuilder│   │   └── confbuilder.py│   ├── setup.py│   ├── test│   │   ├── test.rst│   │   ├── test_IPy.py│   │   └── test_fuzz.py│   └── test_doc.py└── colorama├── __init__.py├── ansi.py├── ansitowin32.py├── initialise.py├── win32.py└── winterm.py15 directories, 61 files

看到有一个dirmap.py的文件,查看这个文件内容。

把代码复制过来,然后我给加上中文注释(我的注释,为了区分,前边用两个#):

c0ny100@dingzongdeMacBook-Air dirmap % vim dirmap.py ## 以"#!"开头的,是用来指定python解释器的,这里是python3
## 如果不指定你就不能用"./dirmap.py"来执行了
#!/usr/bin/env python3
# -*- coding: utf-8 -*-## 这里是作者信息,没什么好说的
'''
@Author: xxlin
@LastEditors: xxlin
@Date: 2019-04-10 13:27:59
@LastEditTime: 2019-05-01 17:57:11
'''## 导入了两个模块
import os
import sys## 这里的gevent是第三方库
## 从gevent导入了一个monkey模块并调用了patch_all()方法
from gevent import monkey
monkey.patch_all()## 这里用了好几个点来导入,明显是文件路径
## 我们知道python默认从当前目录开始搜,所以这个lib应该在dirmap.py的同级目录
from lib.controller.engine import run
from lib.core.common import banner, outputscreen, setPaths
from lib.core.data import cmdLineOptions, conf, paths
from lib.core.option import initOptions
from lib.parse.cmdline import cmdLineParser## 这个main函数就是用来调用刚刚导入进来的方法
def main():"""main fuction of dirmap """# anyway output thr banner informationbanner() # set paths of project paths.ROOT_PATH = os.getcwd() setPaths()# received command >> cmdLineOptionscmdLineOptions.update(cmdLineParser().__dict__)# loader script,target,working way(threads? gevent?),output_file from cmdLineOptions# and send it to confinitOptions(cmdLineOptions) # run!run()## 然后最后执行一下main函数
if __name__ == "__main__":main()

那这篇文章就是熟悉一下python代码,至少我们现在应该能做到两点:

  1. 能看懂目录结构
  2. 能看懂python代码

至于里边代码怎么写,怎么用渗透框架,怎么写POC,怎么写EXP,怎么写脚本,那是我们后边的内容,大家不要着急~

最后,文章首发于公众号,觉得写的还不错不妨关注一手。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/472409.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode LCP 33. 蓄水(暴力枚举)

文章目录1. 题目2. 解题1. 题目 给定 N 个无限容量且初始均空的水缸,每个水缸配有一个水桶用来打水,第 i 个水缸配备的水桶容量记作 bucket[i]。小扣有以下两种操作: 升级水桶:选择任意一个水桶,使其容量增加为 buck…

svr公式推导_ML-支持向量:SVM、SVC、SVR、SMO原理推导及实现

目录1.导出目标2拉格朗日转换3对偶问题:因为是希望得出L最小时的一些参数w,b,a,但是目前很难一起求得最佳参数,所以换个思路。因为:所以能够容易的计算出拉格朗日乘子a约束时的最坏情况是:但是m个a的值还是无法求出&am…

302状态码_你见过 HTTP 哪些状态码?

❝好久没有写技术文章,今天在四川广元无事,总结一篇。附一张今天早上在嘉陵江遇见的白鹡鸰 (不是我拍的)❞白鹡鸰101 Switch Protocol200 Ok201 Created204 No Content206 Partial Content301 Moved Permanently302 Found304 Not Modified307 Temporary …

羽毛球 机器人 Robocon 2015 泰国预选赛(全国大学生机器人竞赛)

羽毛球 机器人 Robocon 2015 泰国预选赛(全国大学生机器人竞赛) 我把视频传我的优酷上了, 大家可以看看 http://i.youku.com/pomodori posted on 2015-02-04 11:26 rex686568 阅读(...) 评论(...) 编辑 收藏 转载于:https://www.cnblogs.com/Pomodori/p/4316622.html

山西大学计算机应用专业,山西大学计算机应用技术专业

在主要课程学完并确定论文题目后,研究生撰写论文的时间为一年半至两年。(一)论文选题的要求1. 选题必须有一定的理论意义或应用价值论文选题必须对国民经济建设或在学术上有一定的价值。2.国内外研究动态论文选题时,学生必须掌握与该课题有关…

LeetCode LCP 34. 二叉树染色(树上DP)

文章目录1. 题目2. 解题1. 题目 小扣有一个根结点为 root 的二叉树模型,初始所有结点均为白色,可以用蓝色染料给模型结点染色,模型的每个结点有一个 val 价值。 小扣出于美观考虑,希望最后二叉树上每个蓝色相连部分的结点个数不能…

uart口图片_uart 加强了的串口调试助手,可以自动记录传输数据,并且显示图片,示波器等功能 Com Port 编程 267万源代码下载- www.pudn.com...

文件名称: uart下载 收藏√ [5 4 3 2 1 ]开发工具: C#文件大小: 10479 KB上传时间: 2014-06-06下载次数: 62提 供 者: 林元峰详细说明:加强了的串口调试助手,可以自动记录传输数据,并且显示图片,示波器等功能-Enhanced seri…

delphi 串口通信发送_关于串口通信232、485、422和常见问题,就没见过能讲这么清楚的...

先讲串口通信的一些基本概念,术语。如果对串口通信比较熟悉的,就当复习,如果哪里讲的不到位,欢迎及时指出。这里并不对串口的编程作讲解,主要是从应用的角度去讲一讲。因为更多的时候,都是产品做好了&#…

LeetCode 1822. 数组元素积的符号

文章目录1. 题目2. 解题1. 题目 已知函数 signFunc(x) 将会根据 x 的正负返回特定值: 如果 x 是正数,返回 1 。如果 x 是负数,返回 -1 。如果 x 是等于 0 ,返回 0 。 给你一个整数数组 nums 。 令 product 为数组 nums 中所有元…

快速替换图片的组合-AE-样片!

模板下载网址:http://pan.baidu.com/s/1hqCbErM转载于:https://www.cnblogs.com/nedtwo/p/4278337.html

南昌理工学院计算机网络技术专业怎么样,南昌理工学院怎么样 重点专业是什么...

毕业季即将来临,报考的时候同学们和家长朋友们最关心的就是学校好不好的问题,想要了解学校有哪些特色专业、师资力量怎么样。下面小编整理了南昌理工学院的信息,供大家参考。南昌理工学院重点专业国家级特色专业:计算机科学与技术…

英特尔cpu发布时间表_英特尔10nm芯片开始大规模出货,先进制程时间表浮出水面...

多年延期之后,英特尔终于宣布其 10nm 芯片产品开始大量出货。近日,英特尔公布了公司 2019 年 Q3 财报。在财报会议中,英特尔透露了这一消息。具体而言,英特尔已有晶圆厂开始大批量生产 10nm 芯片,未来也还准备建立新厂…

matplotlib绘图_使用matplotlib库绘图

本代码演示对列表元素进行绘图并可视化代码如下:import matplotlib.pyplot as plt #导入matplotlib绘图库,并设置简称为pltlist1[i*2 for i in range(1,10)] #遍历range(1,10)里的元素,并每个乘以2,并将最终的列表赋值给list1plt.…

LeetCode 1824. 最少侧跳次数(DP)

文章目录1. 题目2. 解题1. 题目 给你一个长度为 n 的 3 跑道道路 ,它总共包含 n 1 个 点 ,编号为 0 到 n 。 一只青蛙从 0 号点第二条跑道 出发 ,它想要跳到点 n 处。然而道路上可能有一些障碍。 给你一个长度为 n 1 的数组 obstacles &a…

i5集显和独显的区别_集显核显独显有哪些区别 集显核显独显区别介绍【详解】...

显卡是除处理器之外最受大家关心的硬件装备了,要是显卡配置不到位,其他再好都是浮云,而对于游戏玩家来说,显卡性能差的话更是影响游戏的运行,可折腾人了。今天小编为大家分享“集显”、“核显”和“独显”这3个显卡概念…

桌面软件打开都会变成计算机,我不小心把电脑界面程序的打开方式都变成一种了,怎么还原啊?...

如果不小心把电脑桌面程序的打开方式错误的设置成一种后,可以通过以下几种方法还原:方法一:可以通过360里的“360电脑修复专家”功能,进入后,在对话框里输入“电脑的图标异常”,之后立即会自动解决&#xf…

postman 使用_Postman简单使用

今天主要讲解下Postman的简单使用。在使用前,首先需要了解一下什么是Postman,它可以用来做什么?1、 Postman是一款自动化测试的工具,它可以方便的处理HTTP的请求(get、post、put、delete等)。本文主要讲解get和post的使用。2、 那…

中山大学校队选拔赛第二试题试题3【Compressed suffix array】-------2015年2月8日

一:题目大意 本题通过给定三个数组S0,P,S,其中S0是1到2n的一个排列,P具有2n个整数,且满足: 数组S是把数组S0中所有奇数元素全部删除并将所有偶数元素除以2并按照原来的相对顺序进行排列而得。 现…

LeetCode 1825. 求出 MK 平均值(set + queue)

文章目录1. 题目2. 解题1. 题目 给你两个整数 m 和 k ,以及数据流形式的若干整数。 你需要实现一个数据结构,计算这个数据流的 MK 平均值 。 MK 平均值 按照如下步骤计算: 如果数据流中的整数少于 m 个,MK 平均值 为 -1 &#…

vue热更新无法关闭_vue-cli3热更新失效

vue-cli3热更新失效问题公司的一个使用vue-cli3搭建的项目一直无法热更新,每次保存代码后都需要手动刷新页面才能看到修改之后的页面,作为一个强迫症晚期患者,那肯定是忍不了。经过个人研究学习,修复好了项目热更新问题&#xff0…