我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python编写技术有哪些

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python编写技术有哪些

这篇文章主要讲解了“Python编写技术有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python编写技术有哪些”吧!

Python已经成为漏洞开发领域的行业标准,读者会发现大多数概念验证工具都是用Python语言编写的(除了用Ruby写的安全漏洞检测工具)。Python允许开发者编写脚本处理远程服务,处理二进制文件,与C语言库(或者Java的Jython/。Net的IronPython)以快速且简单的方式进行交互。它“内置电池”原则的巨大标准库,为开发省去对其它框架或者语言的依赖。

环境配置

对于你要编写的大多数工程或者脚本,建议读者们最好将所有的依赖放在同一个位置(除了有些在特殊工程中才用到的依赖)。为了满足上述要求,需要用到一个叫virtualenv的工具(Python3.3已经包括该工具),这个工具有一个简洁的功能,就是在不打乱全局环境的基础上,为你的Python工程生成独立的环境:

# 生成新环境的方法如下:$ virtualenv <新环境的路径># 或者在Python3.3以上的环境中:$ python3 -mvenv <新环境的路径># 使用这个环境之前,你要先激活它:$ source <新环境的路径>/bin/activate# 禁止该环境的方式也很简单:$ deactivate

安装依赖包

很多时候大家会发现,借助大型python社区中的python库编写的个人工具,可以帮助我们很快得到结果。你可以通过个人软件管理包或者可用的python软件包管理器安装这些库,其中最权威的就是pip工具了。有了pip,你可以全局安装这些依赖包(#pip install),或者逐用户安装(

Python编写技术有哪些

pip install)。读者可以手动地使用个人发行版包管理器,或者基于Python3.4提供的库,安装pip包。

有一个基本的python包叫iPython,通常在我不是100%肯定该如何解决当前任务,想尝试做些实验时,我会安装这个依赖包。IPython是常用的python命令行,它是基于Python编写的,有以下几个特点:

  • 动态对象内省

  • 通过Tab完成本地命名空间

  • 持续的历史记录

  • 会话日志

  • 路径补全

  • JIT调试器

  • 自动缩进

和平常一样,通过pip安装也很简单:$ pip install ipython

如果你想创建教程或者其它文本文件,ipython中的笔记本特性(现在由jupyter提供)允许用户通过个人浏览器和IPython命令行交互,包括markdown、 mathjax、matplotlib等工具支持。

(通过安装jupyter(pip install jupyter)可以使用它们,开启笔记本服务通过(jupyter notebook))。

如果你在操作时需要与包括JSON/XML的HTTP服务交互,我建议特别好用的requests依赖库。该python库可以处理与网页交互面对的各类操作,如编码、解码、参数、标记、重定向等。例如,请求和解析一个JSON资源的代码如下:

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

大多数HTML解析和交互工作都可以交给BeautifulSoup库,该python库可以在任何现在浏览器上处理HTML输入,包括修复受损代码。

与网络交互

我们大多数目标都有可能在网络上获取,安装好的标准库中已经包含了通用的、有用的python库,这里我对其进行简短的介绍。socket模块是基于BSD socket API的瘦包装器,它在所有的通用操作系统都可用。

所以如果你已经有C语言socket编程经验,你可以将你的代码轻易地翻译成python代码。有很多特别方便的函数,如create_connection函数可以创建TCP socket,建立本机和给定主机或者端口的连接。另一个包装器是sendall方法,有些数据只有当所有给定数据都被发出,或者有错误发生才能在线路中传输,而sendall方法可以尝试重传这些数据。

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

增加TSL加密链路也非常简单:

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

上述功能也可以在已经使用的连接中实现:

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

如何你不需要这些低级服务交互,还有些模块可以提供高层服务交互:

smtplib

ftplib

poplib

imaplib

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

nntplib

telnetlib (应用于服务开发和之后的需要交互命令行会话)

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

二进制操作或编码

当开发与服务或者文件交互的脚本时,你经常会发现需要将数据转换为不同格式或者编码。在Python2.x版本中,通常使用encode或者decode方法将字符串在不同格式之间转换。

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

很可惜,这种捷径在Python3.x版本中被取消了,encode和decode方法当前只可以实现字符编码,如utf-8, cp1250, iso8859, big5等。

作为替代,你现在只能使用bytes类型的两种方法实现十六进制编码:

bytes.fromhex('414141')b'AAA'.hex() # 从Py3.5 开始

对于Base64编码,你需要使用另外的模块(在Python2.x版本中也有):

import base64base64.b64encode(b'Hello World')import codecscodecs.encode(b'Hello World', 'base64')import binasciibinascii.b2a_base64(b'Hello World')

URLs编码或者解析可以用urllib.parse模块实现(Python2.x版本中是urllib)

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

Python普通数据类型(如int,float,str)与二进制之间的一般转换,可以在stuct模块中实现:

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

Python3.2也可以使用int类型直接获取其二进制表示:

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

ctypes 模块还有一个特别棒的特征,如果你将cpython作为解译器(通常大家都是这样),就可以使用ctypes.Structure结构化描述C语言,获取它们的二进制表示,就好像从C应用程序中转储的一样。

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

ctypes 模块通常是Python程序集和C语言库之间的桥梁,不需要编写任何Python包装器。有了ctypes模块,你可以使用任何C语言库和其输出函数:

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

上文中提到Structure 类型主要用于C语言库的交互,在函数调用过程中传递或者获取结构。

漏洞开发工具

很多CTF团体提供他们自己的的CTF解决方案框架,我发现来自Gallopsled 的pwntools框架特别有用,尤其是开发远程elf二进制时,它包含很多方便的函数,例如位移计算(通过cyclic模式)、格式化字符串开发(普通数据馈送以及产生的格式化字符串)、跳转组合(基于ropgadget解析elf二进制以及提供生成简单跳转组合调用的包装器)和不同传输通道的全部API(称作管道)。这些可以让读者们开发gdb编译后端,同时简单地改变一行代码就可以传输到目标服务。

from pwn import *r = gdb.debug('./level3')# r = remote(IP, PORT) # 为了做一个远程交互式的接口,先注释r.recvuntil(': ')r.sendline(EXPLOIT)r.interactive() # 开启一个交互式会话

感谢各位的阅读,以上就是“Python编写技术有哪些”的内容了,经过本文的学习后,相信大家对Python编写技术有哪些这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Python编写技术有哪些

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python编写技术有哪些

这篇文章主要讲解了“Python编写技术有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python编写技术有哪些”吧!Python已经成为漏洞开发领域的行业标准,读者会发现大多数概念验
2023-06-02

编写Python小技巧有哪些

本篇内容主要讲解“编写Python小技巧有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“编写Python小技巧有哪些”吧!1. List:all_equal功能实现:检验一个列表中的所有元素
2023-06-16

PHP 异步编程技术有哪些?

php 异步编程技术指南有下列主要方法:reactphp:事件驱动的库,提供事件循环和反应式扩展。amphp:基于协程的库,使用生成器函数和协程进行异步编程。guzzle psr7:用于处理 http 请求和响应的库,它支持异步请求。sym
PHP 异步编程技术有哪些?
2024-05-06

写Python有哪些小技巧

本篇内容介绍了“写Python有哪些小技巧”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1. 反转字符串虽然看似是很基础的操作,但是用cha
2023-06-16

写Python的技巧有哪些

本篇内容主要讲解“写Python的技巧有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“写Python的技巧有哪些”吧!1.导入模块你是不是经常对调用模块时输入一长串模块索引感到头疼?说实在的
2023-06-16

HTML代码编写技巧有哪些

这篇文章主要为大家展示了“HTML代码编写技巧有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“HTML代码编写技巧有哪些”这篇文章吧。1. 一定要闭合HTML标签在以往的页面源代码里,经常看
2023-06-08

有哪些技巧编写出更好的Python代码

这篇文章主要讲解了“有哪些技巧编写出更好的Python代码”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“有哪些技巧编写出更好的Python代码”吧!1. 使用enumerate()而不是ra
2023-06-16

Python的切分技术有哪些

本篇内容介绍了“Python的切分技术有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!列表切分在不考虑内存占用的情况下,我们对上面的大任
2023-06-16

编写更简洁Python代码的技巧有哪些

这篇文章主要介绍“编写更简洁Python代码的技巧有哪些”,在日常操作中,相信很多人在编写更简洁Python代码的技巧有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”编写更简洁Python代码的技巧有哪些
2023-06-16

Python有哪些技巧能编写更好的代码

这篇文章主要讲解了“Python有哪些技巧能编写更好的代码”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python有哪些技巧能编写更好的代码”吧!技巧01-变量的多重分配Python允许我
2023-06-16

好玩的Python技术有哪些

这篇文章主要介绍“好玩的Python技术有哪些”,在日常操作中,相信很多人在好玩的Python技术有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”好玩的Python技术有哪些”的疑惑有所帮助!接下来,请跟
2023-06-02

Java相关的编译技术有哪些

这篇文章主要介绍Java相关的编译技术有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!JIT 编译器 传统的 Java 虚拟机器很愚蠢,将一道 bytecode 的指令翻译成机器码之后,马上执行这些机器码,执行完
2023-06-03

Python缩写的技巧有哪些

本篇内容主要讲解“Python缩写的技巧有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python缩写的技巧有哪些”吧!1. OOP(面向对象编程)我们一定要知道的第一个缩写是OOP--面
2023-06-16

有哪些Python技巧用于编写更好的代码

这篇文章主要讲解了“有哪些Python技巧用于编写更好的代码”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“有哪些Python技巧用于编写更好的代码”吧!1. F StringF字符串为将Py
2023-06-16

Python编写时有哪些错误

这篇文章主要介绍“Python编写时有哪些错误”,在日常操作中,相信很多人在Python编写时有哪些错误问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python编写时有哪些错误”的疑惑有所帮助!接下来,请跟
2023-06-02

优秀的Python编写有哪些

这篇文章主要介绍“优秀的Python编写有哪些”,在日常操作中,相信很多人在优秀的Python编写有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”优秀的Python编写有哪些”的疑惑有所帮助!接下来,请跟
2023-06-02

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录