python gevent模块 下载_【python安全攻防】包、模块、类、对象
終于又到了一周一度的整理博客的時間了,博主平時課余時間看書,周末統一整理,堅持周更真是愛了愛了 ~
今天要說的是python面向對象這一部分的內容,今天這是基礎篇的第二篇,也是最后一篇。
說來基礎篇還真是少呢,第一篇說了一下函數部分比較難理解的閉包和裝飾器,今天說一下模塊、包、對象、類這部分。當然中途還有很多東西也很重要啊。
這三部分,有一點編程基礎的,網上找篇博客隨便看看就能懂,不會的等遇到了直接百度,也比我現在寫篇博客節省時間,所以就沒寫,但是我肯定都看了,哈哈。
因為平時滲透過程中,我們經常會用到別人寫的腳本,或者使用滲透測試框架時也需要自己動手寫POC/EXP之類的,甚至以后可能會自己寫一些python腳本,所以python的函數、對象等等這部分內容是非常重要的。
我希望今天這部分結束后,我們至少可以做到能讀懂別人的腳本,于是我就去隨便下了一個dirmap,等下在文章最后,大家和我一起讀一下源碼!
那廢話不多說,開始今天的內容,包-> 模塊-> 類-> 對象-> 方法,咦?為什么加個箭頭呢?因為它們的關系確實如此:
包
如果一個目錄下是一堆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('白帽子續命指南')除此之外,方法也分很多種,比如帶下劃線的,還有類方法、靜態方法等等,這里不細說,遇到了再去百度。簡單說三種:
繼承
繼承就是子類和父類那一塊的,語法格式為:
# 父類 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代碼,至少我們現在應該能做到兩點:
至于里邊代碼怎么寫,怎么用滲透框架,怎么寫POC,怎么寫EXP,怎么寫腳本,那是我們后邊的內容,大家不要著急~
最后,文章首發于公眾號,覺得寫的還不錯不妨關注一手。
總結
以上是生活随笔為你收集整理的python gevent模块 下载_【python安全攻防】包、模块、类、对象的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: micropython webrepl_
- 下一篇: python自动复制_Python自动复