IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> Python基础入门与提高 -> 正文阅读

[网络协议]Python基础入门与提高

在这里插入图片描述
在这里插入图片描述

前言:

不管在渗透测试中,还是CTF中,人工智能等领域,Python自从1991年诞生以来,作为一种使用简单的工具语言,以及渗透进了我们的生活中,本文主要以黑客的视角
讲解Python,简单的总结Python语言在CTF竞赛中的重点使用。本文主要讲解Python语法及其重点应用,关于Python安装等文章请移步其他文章。

本文参考:BIT-NSC北京理工大学信息安全实验室/网络安全俱乐部CTF竞赛
[注意:以下内容源自BIT-NSC社团网络安全课程讲义]仅供学习研究参考

Python快速入门

Python(英国发音:/?pa?θ?n/ 美国发音:/?pa?θɑ?n/)是一种广泛使用的解释型、高级和通用的
编程语言。Python支持多种编程范型,包括函数式、指令式、结构化、面向对象和反射式编程。它拥有
动态类型系统和垃圾回收功能,能够自动管理内存使用,并且其本身拥有一个巨大而广泛的标准库。
Python的设计哲学强调代码的可读性和简洁的语法,尤其是使用空格缩进划分代码块。相比于C或
Java,Python让开发者能够用更少的代码表达想法。[Wikipedia]

注意:我们讲的是 Python3 而非 Python2 ,两者之间有不小的区别,上网搜索相关信息时请注意分辨。

Python 环境配置

Windows
Python官网https://www.python.org/downloads/ 下载最新版,安装时记得勾选Add Python 3.x to PATH」
Linux & BSD & macOS
用你的包管理器安装 Python3。特别注意,是Python3而非Python,因为很多系统默认Python为 Python2.

文本编辑器 & IDE

Option A. 利用 VS Code 作为文本编辑器(甚至IDE)
具体步骤:

  1. https://code.visualstudio.com/Download VsCode从这里下载VSCode
  2. 安装,记得勾选「添加到PATH」或者「添加到环境变量」
  3. 安装 Python 拓展和中文语言拓展
    在这里插入图片描述
    4.安装语言扩展,搜索Python,重启Vscode
    Option B. 利用其它编辑器和ide
    我之前刚接触Python使用的是Aptana Studio,这是一个开源项目,可以供你进行自定义更改,是一款强大的IDE。
    它的项目开源地址:https://github.com/aptana/studio3
    在这里插入图片描述
    博主之前的文章曾提到该IDE,你也可以参考:
    技能篇:在Kali Linux2系统中安装搭建Python编程环境——Aptana之 Linux完整安装详细介绍 ,以及遇到/metadata/.log和日志文件出错无法打开软件等问题解决方案(1)

Python-pip换源介绍

pip是python自带的包管理器Package Management,它从一个仓库下载,默认仓库由于在国外,我们将其换成国内(清华镜像源)可以提高我们下载并安装包的速度,pip换源(使用以下命令)

pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

基本语法介绍

2.1Python注释

#用#字符作为单行注释
"""" 跨行、多行注释内容
     aaaaa
     bbbbb
""""

Python数据类型

整数int(无限精度)
二进制0b100101
十六进制0xFFFFFFF0
八进制Oo777711
浮点数float (更高精度,decimal模版)
复数complex
数值运算:math.sin()
按位运算:~ | ^ & << >> 与C语言相同 注意:Python中无 ++ –
bin(),hex()转化为2进制/16进制字符串
int(x)将x转为一个整数,float(x)是将x转化为浮点数

逻辑

布尔值:True False注意大写 (Standard by C++)
布尔运算: or and not ,返回True False
C语言表示方法:
or ||
and &&
not !
比较运算: 和C一样,以及is和is not(in和not in)用于判断对象(Object),返回True False
#大小比较
1<2<3 # => True
2<3<2 # => False

二进制数据和文本字符串

Python中字符串就是字符串,数值就是数值。
字符串str(‘xxxxxx’or"xxxxxxx",\n\r’'等转义),用加号连接字符串

#用加号连接字符串
“Hello”+“world”!# ==>"Hello world!"\
#字符串可以被当作字符列表
“This is a string”[0] # => 'T'
#用.format来格式化字符串
"{} can be {}".fomat("strings","interpolated")
#如果不想要数参数,能用关键字
"{name}wants to eat{food}".format(name="Bob",food="lasagna") #=>"Bob
wants to eat lasagna"
#原始字符
r'aaa\\\\\\\\\\naa'
bytes(b'\0x1\0x21\xffasdsa')

常用函数参考:
capitalize() 将字符串的第一个字符转换为大写
center(width, fillchar) 返回一个指定的宽度 width 居中的字符串,fillchar 为填充的字符,默认为空格。
count(str, beg= 0,end=len(string)) 返回 str 在 string 里面出现的次数,如果 beg 或者 end指定则返回指定范围内 str 出现的次数
bytes.decode(encoding=“utf-8”, errors=“strict”) Python3 中没有 decode 方法,但我们可以使用 bytes 对象的 decode() 方法来解码给定的 bytes 对象,这个 bytes 对象可以由str.encode() 来编码返回。
encode(encoding=‘UTF-8’,errors=‘strict’) 以 encoding 指定的编码格式编码字符串,如果
出错默认报一个ValueError 的异常,除非 errors 指定的是’ignore’或者’replace’
endswith(suffix, beg=0, end=len(string)) 检查字符串是否以 obj 结束,如果beg 或者 end指定则检查指定的范围内是否以 obj 结束,如果是,返回 True,否则返回 False.
expandtabs(tabsize=8) 把字符串 string 中的 tab 符号转为空格,tab 符号默认的空格数是8 。
find(str, beg=0, end=len(string)) 检测 str 是否包含在字符串中,如果指定范围 beg 和 end,则检查是否包含在指定范围内,如果包含返回开始的索引值,否则返回-1
index(str, beg=0, end=len(string)) 跟find()方法一样,只不过如果str不在字符串中会报一个异常。
isalnum() 如果字符串至少有一个字符并且所有字符都是字母或数字则返 回 True,否则返回False
isalpha() 如果字符串至少有一个字符并且所有字符都是字母或中文字则返回 True, 否则返回False
isdigit() 如果字符串只包含数字则返回 True 否则返回 False…islower() 如果字符串中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回 True,否则返回 False
isnumeric() 如果字符串中只包含数字字符,则返回 True,否则返回 False
isspace() 如果字符串中只包含空白,则返回 True,否则返回 False.
istitle() 如果字符串是标题化的(见 title())则返回 True,否则返回 False
isupper() 如果字符串中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回 True,否则返回 False
join(seq) 以指定字符串作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串
len(string) 返回字符串长度
[ljust(width, fillchar]) 返回一个原字符串左对齐,并使用 fillchar 填充至长度 width 的新字符串,fillchar 默认为空格。
lower() 转换字符串中所有大写字符为小写.
用法 xxxxxstr.method(args)
lstrip() 截掉字符串左边的空格或指定字符。
maketrans() 创建字符映射的转换表,对于接受两个参数的最简单的调用方式,第一个参数
是字符串,表示需要转换的字符,第二个参数也是字符串表示转换的目标。
max(str) 返回字符串 str 中最大的字母。
min(str) 返回字符串 str 中最小的字母。
replace(old, new , max]) 把 将字符串中的 old 替换成 new,如果 max 指定,则替换不超过max 次。
rfind(str, beg=0,end=len(string)) 类似于 find()函数,不过是从右边开始查找.
rindex( str, beg=0, end=len(string)) 类似于 index(),不过是从右边开始.
[rjust(width, fillchar]) 返回一个原字符串右对齐,并使用fillchar(默认空格)填充至长度width 的新字符串
rstrip() 删除字符串末尾的空格或指定字符。
split(str=“”, num=string.count(str)) 以 str 为分隔符截取字符串,如果 num 有指定值,则仅截取 num+1 个子字符串
splitlines(keepends]) 按照行(‘\r’, ‘\r\n’, \n’)分隔,返回一个包含各行作为元素的列表,如果
参数 keepends 为 False,不包含换行符,如果为 True,则保留换行符。

startswith(substr, beg=0,end=len(string)) 检查字符串是否是以指定子字符串 substr 开
头,是则返回 True,否则返回 False。如果beg 和 end 指定值,则在指定范围内检查。
strip(chars]) 在字符串上执行 lstrip()和 rstrip()
swapcase() 将字符串中大写转换为小写,小写转换为大写
title() 返回"标题化"的字符串,就是说所有单词都是以大写开始,其余字母均为小写(见istitle())
translate(table, deletechars=“”) 根据 str 给出的表(包含 256 个字符)转换 string 的字符, 要过滤掉的字符放到 deletechars 参数中
upper() 转换字符串中的小写字母为大写
zfill (width) 返回长度为 width 的字符串,原字符串右对齐,前面填充0
isdecimal() 检查字符串是否只包含十进制字符,如果是返回 true,否则返回 false。

暂且不考虑大端序与小端序,除了在ASCII码表里的符号数字,我们还需要表示其他种类的文字
例如中文,我们不能用这种方式来表示字符,我们需要一种编码,例如GTK编码,GB2312编码
我们将,字节串译码成为字符串。

变量(列表与字典)

#在给变量赋值的时候不需要提前声明,也不需要加类型名称。
#传统变量名使用小写,用下划线分隔单词。
some_var =5
例如程序字符太长写不下了,用以下方法表示
some_var:int = 110000000000000000011111111111\
          + 100000000000
#用列表(list) 储存序列
li = []
other_li = [4,5,6]
#使用append在列表最后追加元素
li.append(1) #li=[1]
li.append(2) #li=[1,2]
li.append(4) #li=[1,2,4]
li.append(3) #li现在是[1,2,4,3]
#列表存取数组
li[0] # =>1
#取出最后一个元素
li[-1]# =>3
#倒数第二个元素
li[-2]
#越界访问会造成IndexError
li[4]
#列表有切片语法(左闭右开区间)
li[1:3] # => [2,4]
#取尾
li[2:] #=> [4,3]
#取头
li[:3] #=>[1,2,4]
#隔一个取一个
li[::2] #=>[1,4]
#倒数列表
li[::-1] # => [3,4,2,1]
#可以用三个参数的任何组合构建slice
#li[始:终:步伐]
#用del删除任何一个元素
del li[2] #li is now [1,2,3]
#列表可以想加
li + other_li # => [1,2,3,4,5,6]
#用in测试列表是否包含值
1 in li #=>True
#用len取列表长度
len(li) #=> 6
#元组(一种特殊的列表List)不可变的
tup =(1,2,3)
tup[0] #=>1
tup[0] = 3 #抛出异常
#列表允许操作元组大都可以
len(tup)#=>3
tup+ (4,5,6) #=> (1,2,3,4,5,6)
tup[:2] # =>(1,2)
2 in tup #=>True
#元组列表可以解包,赋值给变量,周围的括号可以省略
a,b,c=(1,2,3)
d,e,f=4,5,6
e,d=d,e
#用字典的方式映射关系
empty_dict = {}
#初始化字典
filled_dict = {"one":1,"two":2,"three":3}
#用[]取值
filled_dict["one"] #=>1
>>> somedict ={1:2,2:3}
>>> somedict[1]
2
>>> somedict[2]
3

流程控制

没有花括号,用缩进控制语块。

somevar = 1
if somevar == 1:
   xxx
elif somevar > 1:
   yyy
else:
   zzz
#while
x = 0
while x<4:
      print(x)
      x += 1 
#for
for animal in ["dog","cat","mouse"]
    print("{}is a animal".format(animal))
""""
for i in range(4):
    print(i)
""""
for i in range(0,10,3):
    print(i)

函数

#用def定义函数
def add(x,y):
    print("x is {} and y is {}".format(x,y))
    return x + y #用return语句返回
#调用函数
add(5,6) #=>print out “x is 5 and y is 6"并返回11
#用关键字
add(y=6,x=5)

2.8变量作用域

x = 5 
def setX(num):
   #局部作用域的x和全局域的x是不同的
   x = num #=> 43
   print(x) # => 43
def setGlobalx(num):
   global x
   print (x)
   x = num
   print(x)

setx(43)
setGloabalx(6)

模块

#用import导入模块
import math
print(math.sqrt(16)) # => 4.0
#也可以从模块中导入个别值
from math import ceil,floor
#类似C++的 using math::ceil;
print(ceil(3.7))
print(floor(3.7))
from math import *
#缩写模块名字
import math as m
math.sqrt(16) == m.sqrt(16)
import math
dir(math)

3.0输入输出

print("hello world")
a = input()
b =input("input something...")
print(a)
print(b)
print(b,end=',')
#各种格式化字符串
>>>print("%d"% 12)
12

运算优先级

运算符 描述

** 指数 (最高优先级)
~ + - 按位翻转, 一元加号和减号 (最后两个的方法名为 +@ 和 -@)
*/ % // 乘,除,求余数和取整除
+- 加法减法
<<  右移,左移运算符
&'AND'
^ | 位运算符
<= < > >= 比较运算符
== != 等于运算符
= %= /= //= -= += *=  赋值运算符
is is not 身份运算符
in not in 成员运算符
not and or 逻辑运算符 **

文件操作

#文件读取
#读文本文件
f = open("filepath",'r')
#读取全部,注意文件不能太大
f.read()
#关闭文件
f.close()
#由于每次这样反复操作太麻烦,Python引入了with语句自动完成close()操作
with open('filepath','r') as f:
#读一行
f.readline()
#一次读取所有内容并按行返回list
f.readlines()
#如果需要读取UTF-8编码的文字,需要给open()函数传入encoding参数。
f=open('filepath_gdk','r',encoding='gbk')
#读取二进制文件,把'r'改成'rb'
f = open("filepath",'rb')
f.read()
#b '\xff\d8\xff\xe1\x00\x18Exds\x00\x00'
#写文件,与读文件类似,
with open('filepath','w')as f:
     f.write('Hello world!')

Python内存模型[传值和传引用]

传值和传引用,可变和不可变化对象
Python中所有的变量名字都可以认为是对象
不可变类型:变量赋值a=5后再赋值a=10
在内存中先分配一个5的空间,然后再分配一个10的空间,我们可以认为将a指向了10这就是不可变类型
可变类型:变量赋值 la=[1,2,3,4] 后再赋值 la[2]=5

不可变模型:
在这里插入图片描述
可变模型:
在这里插入图片描述

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章           查看所有文章
加:2022-06-06 17:32:48  更:2022-06-06 17:33:17 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 12:10:36-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码