中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

Python編寫技術(shù)有哪些-創(chuàng)新互聯(lián)

這篇文章主要講解了“Python編寫技術(shù)有哪些”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“Python編寫技術(shù)有哪些”吧!

創(chuàng)新互聯(lián)公司是一家專業(yè)從事網(wǎng)站建設(shè)、網(wǎng)絡(luò)營(yíng)銷、成都微信小程序、網(wǎng)站運(yùn)營(yíng)為一體的建站企業(yè);在網(wǎng)站建設(shè)告別千篇一律,告別似曾相識(shí),這一次我們重新定義網(wǎng)站建設(shè),讓您的網(wǎng)站別具一格。響應(yīng)式網(wǎng)站建設(shè),實(shí)現(xiàn)全網(wǎng)營(yíng)銷!一站適應(yīng)多終端,一樣的建站,不一樣的體驗(yàn)!

Python已經(jīng)成為漏洞開(kāi)發(fā)領(lǐng)域的行業(yè)標(biāo)準(zhǔn),讀者會(huì)發(fā)現(xiàn)大多數(shù)概念驗(yàn)證工具都是用Python語(yǔ)言編寫的(除了用Ruby寫的安全漏洞檢測(cè)工具)。Python允許開(kāi)發(fā)者編寫腳本處理遠(yuǎn)程服務(wù),處理二進(jìn)制文件,與C語(yǔ)言庫(kù)(或者Java的Jython/。Net的IronPython)以快速且簡(jiǎn)單的方式進(jìn)行交互。它“內(nèi)置電池”原則的巨大標(biāo)準(zhǔn)庫(kù),為開(kāi)發(fā)省去對(duì)其它框架或者語(yǔ)言的依賴。

1. 環(huán)境配置

對(duì)于你要編寫的大多數(shù)工程或者腳本,建議讀者們最好將所有的依賴放在同一個(gè)位置(除了有些在特殊工程中才用到的依賴)。為了滿足上述要求,需要用到一個(gè)叫virtualenv的工具(Python3.3已經(jīng)包括該工具),這個(gè)工具有一個(gè)簡(jiǎn)潔的功能,就是在不打亂全局環(huán)境的基礎(chǔ)上,為你的Python工程生成獨(dú)立的環(huán)境:

# 生成新環(huán)境的方法如下:
$ virtualenv <新環(huán)境的路徑>
# 或者在Python3.3以上的環(huán)境中:
$ python3 -mvenv <新環(huán)境的路徑>
# 使用這個(gè)環(huán)境之前,你要先激活它:
$ source <新環(huán)境的路徑>/bin/activate
# 禁止該環(huán)境的方式也很簡(jiǎn)單:
$ deactivate

2. 安裝依賴包

很多時(shí)候大家會(huì)發(fā)現(xiàn),借助大型python社區(qū)中的python庫(kù)編寫的個(gè)人工具,可以幫助我們很快得到結(jié)果。你可以通過(guò)個(gè)人軟件管理包或者可用的python軟件包管理器安裝這些庫(kù),其中最權(quán)威的就是pip工具了。有了pip,你可以全局安裝這些依賴包(#pip install),或者逐用戶安裝(

Python編寫技術(shù)有哪些

pip install)。讀者可以手動(dòng)地使用個(gè)人發(fā)行版包管理器,或者基于Python3.4提供的庫(kù),安裝pip包。

有一個(gè)基本的python包叫iPython,通常在我不是100%肯定該如何解決當(dāng)前任務(wù),想嘗試做些實(shí)驗(yàn)時(shí),我會(huì)安裝這個(gè)依賴包。IPython是常用的python命令行,它是基于Python編寫的,有以下幾個(gè)特點(diǎn):

  • 動(dòng)態(tài)對(duì)象內(nèi)省

  • 通過(guò)Tab完成本地命名空間

  • 持續(xù)的歷史記錄

  • 會(huì)話日志

  • 路徑補(bǔ)全

  • JIT調(diào)試器

  • 自動(dòng)縮進(jìn)

和平常一樣,通過(guò)pip安裝也很簡(jiǎn)單:$ pip install ipython

如果你想創(chuàng)建教程或者其它文本文件,ipython中的筆記本特性(現(xiàn)在由jupyter提供)允許用戶通過(guò)個(gè)人瀏覽器和IPython命令行交互,包括markdown、 mathjax、matplotlib等工具支持。

(通過(guò)安裝jupyter(pip install jupyter)可以使用它們,開(kāi)啟筆記本服務(wù)通過(guò)(jupyter notebook))。

如果你在操作時(shí)需要與包括JSON/XML的HTTP服務(wù)交互,我建議特別好用的requests依賴庫(kù)。該python庫(kù)可以處理與網(wǎng)頁(yè)交互面對(duì)的各類操作,如編碼、解碼、參數(shù)、標(biāo)記、重定向等。例如,請(qǐng)求和解析一個(gè)JSON資源的代碼如下:

r = requests.get('https://api.github.com/user', auth=('user', 'pass'))
r.json()
{u'private_gists': 419, u'total_private_repos': 77, ...}

大多數(shù)HTML解析和交互工作都可以交給BeautifulSoup庫(kù),該python庫(kù)可以在任何現(xiàn)在瀏覽器上處理HTML輸入,包括修復(fù)受損代碼。

3. 與網(wǎng)絡(luò)交互

我們大多數(shù)目標(biāo)都有可能在網(wǎng)絡(luò)上獲取,安裝好的標(biāo)準(zhǔn)庫(kù)中已經(jīng)包含了通用的、有用的python庫(kù),這里我對(duì)其進(jìn)行簡(jiǎn)短的介紹。socket模塊是基于BSD socket API的瘦包裝器,它在所有的通用操作系統(tǒng)都可用。

所以如果你已經(jīng)有C語(yǔ)言socket編程經(jīng)驗(yàn),你可以將你的代碼輕易地翻譯成python代碼。有很多特別方便的函數(shù),如create_connection函數(shù)可以創(chuàng)建TCP socket,建立本機(jī)和給定主機(jī)或者端口的連接。另一個(gè)包裝器是sendall方法,有些數(shù)據(jù)只有當(dāng)所有給定數(shù)據(jù)都被發(fā)出,或者有錯(cuò)誤發(fā)生才能在線路中傳輸,而sendall方法可以嘗試重傳這些數(shù)據(jù)。

from __future__ import unicode_literals
import socket
s = socket.create_connection(('www.ernw.de', 80))
s.sendall(b'GET / HTTP/1.1
Host: www.ernw.de
')
print(s.recv(1024))

增加TSL加密鏈路也非常簡(jiǎn)單:

from __future__ import unicode_literals
import socket
import ssl
s = socket.create_connection(('www.ernw.de', 443))
s = ssl.wrap_socket(s)
s.sendall(b'GET / HTTP/1.1
Host: www.ernw.de
')
print(s.recv(1024))

上述功能也可以在已經(jīng)使用的連接中實(shí)現(xiàn):

from __future__ import unicode_literals
import socket
import ssl
s = socket.create_connection(('smtp.example.com', 25))
s.sendall(b'HELO smtp.example.com
STARTTLS
')
print(s.recv(1024))
s = ssl.wrap_socket(s)
s.sendall(b'MAIL FROM:<foo@example.com>
')
print(s.recv(1024))

如何你不需要這些低級(jí)服務(wù)交互,還有些模塊可以提供高層服務(wù)交互:

smtplib

ftplib

poplib

imaplib

httplib (Python 3以上版本的http客戶端)

nntplib

telnetlib (應(yīng)用于服務(wù)開(kāi)發(fā)和之后的需要交互命令行會(huì)話)

xmlrpclib (Python 3以上版本的xmlrpc客戶端)

4. 二進(jìn)制操作或編碼

當(dāng)開(kāi)發(fā)與服務(wù)或者文件交互的腳本時(shí),你經(jīng)常會(huì)發(fā)現(xiàn)需要將數(shù)據(jù)轉(zhuǎn)換為不同格式或者編碼。在Python2.x版本中,通常使用encode或者decode方法將字符串在不同格式之間轉(zhuǎn)換。

"Hello World".encode("hex")
"AAA=".decode("base64")

很可惜,這種捷徑在Python3.x版本中被取消了,encode和decode方法當(dāng)前只可以實(shí)現(xiàn)字符編碼,如utf-8, cp1250, iso8859, big5等。

作為替代,你現(xiàn)在只能使用bytes類型的兩種方法實(shí)現(xiàn)十六進(jìn)制編碼:

bytes.fromhex('414141')
b'AAA'.hex() # 從Py3.5 開(kāi)始

對(duì)于Base64編碼,你需要使用另外的模塊(在Python2.x版本中也有):

import base64
base64.b64encode(b'Hello World')
import codecs
codecs.encode(b'Hello World', 'base64')
import binascii
binascii.b2a_base64(b'Hello World')

URLs編碼或者解析可以用urllib.parse模塊實(shí)現(xiàn)(Python2.x版本中是urllib)

from urllib.parse import quote_plus, unquote_plus
quote_plus('Hello World+1=1337') # Hello+World%2B1%3D1337
unquote_plus('Hello+World') # Hello World

Python普通數(shù)據(jù)類型(如int,float,str)與二進(jìn)制之間的一般轉(zhuǎn)換,可以在stuct模塊中實(shí)現(xiàn):

import struct
struct.pack('<I', 1337) # convert the integer 1337 into its little endian, 32 bit representation
struct.unpack('<I', b'')[0] # returns tuple of results -> get only the first result
struct.unpack('<I4s', b'Test') # returns (16, b'Test')

Python3.2也可以使用int類型直接獲取其二進(jìn)制表示:

a = 1337
a.to_bytes(4, 'little') # 32 bit little endian
a.to_bytes(2, 'big') # 16 bit big endian
int.from_bytes(b'', 'little') # 16

ctypes 模塊還有一個(gè)特別棒的特征,如果你將cpython作為解譯器(通常大家都是這樣),就可以使用ctypes.Structure結(jié)構(gòu)化描述C語(yǔ)言,獲取它們的二進(jìn)制表示,就好像從C應(yīng)用程序中轉(zhuǎn)儲(chǔ)的一樣。

from ctypes import *
import io
class TestStructure(Structure):
 _fields_ = (('foo', c_int), ('bar', c_char))
t = Test()
t.foo = 1337
t.bar = b'A'
b = io.BytesIO()
b.write(t)
b.seek(0)
print(b.getvalue()) # 9A
t2 = Test()
b = io.BytesIO(b'B')
b.readinto(t2)
print(t2.foo) # 16
print(t2.bar) # B

ctypes 模塊通常是Python程序集和C語(yǔ)言庫(kù)之間的橋梁,不需要編寫任何Python包裝器。有了ctypes模塊,你可以使用任何C語(yǔ)言庫(kù)和其輸出函數(shù):

from ctypes import *
libc = ctypes.CDLL('libc.so.6')
libc.printf(b'Hello World
')

上文中提到Structure 類型主要用于C語(yǔ)言庫(kù)的交互,在函數(shù)調(diào)用過(guò)程中傳遞或者獲取結(jié)構(gòu)。

5. 漏洞開(kāi)發(fā)工具

很多CTF團(tuán)體提供他們自己的的CTF解決方案框架,我發(fā)現(xiàn)來(lái)自Gallopsled 的pwntools框架特別有用,尤其是開(kāi)發(fā)遠(yuǎn)程elf二進(jìn)制時(shí),它包含很多方便的函數(shù),例如位移計(jì)算(通過(guò)cyclic模式)、格式化字符串開(kāi)發(fā)(普通數(shù)據(jù)饋送以及產(chǎn)生的格式化字符串)、跳轉(zhuǎn)組合(基于ropgadget解析elf二進(jìn)制以及提供生成簡(jiǎn)單跳轉(zhuǎn)組合調(diào)用的包裝器)和不同傳輸通道的全部API(稱作管道)。這些可以讓讀者們開(kāi)發(fā)gdb編譯后端,同時(shí)簡(jiǎn)單地改變一行代碼就可以傳輸?shù)侥繕?biāo)服務(wù)。

from pwn import *
r = gdb.debug('./level3')
# r = remote(IP, PORT) # 為了做一個(gè)遠(yuǎn)程交互式的接口,先注釋
r.recvuntil(': ')
r.sendline(EXPLOIT)
r.interactive() # 開(kāi)啟一個(gè)交互式會(huì)話

感謝各位的閱讀,以上就是“Python編寫技術(shù)有哪些”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)Python編寫技術(shù)有哪些這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

分享題目:Python編寫技術(shù)有哪些-創(chuàng)新互聯(lián)
網(wǎng)頁(yè)鏈接:http://www.rwnh.cn/article24/ephce.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)公司、域名注冊(cè)外貿(mào)建站、做網(wǎng)站、虛擬主機(jī)App設(shè)計(jì)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都app開(kāi)發(fā)公司
银川市| 洞头县| 鱼台县| 贵港市| 资兴市| 陕西省| 合作市| 萍乡市| 新野县| 化州市| 汤阴县| 静海县| 偏关县| 丰都县| 昌黎县| 东海县| 秦皇岛市| 潢川县| 盐边县| 阆中市| 夹江县| 中江县| 宜兴市| 沈阳市| 应用必备| 大方县| 民乐县| 徐闻县| 南溪县| 友谊县| 沧源| 邵武市| 丁青县| 天门市| 大方县| 清苑县| 怀化市| 班玛县| 保康县| 富顺县| 镇宁|