python模块

记录小白入门安全开发的学习笔记,供日后回顾。

我们可能经常在poc或exp中看到这个:(不管你之前看没看到,反正你现在看到了)

if __name__ == '__main__':
    main()

将验证漏洞的逻辑代码放入main()函数中,调用前加一个判断。

为什么我们不直接调用main()呢?

当把py脚本当成模块导入时 , 代码会被执行 , 加这个判断就是为了防止有人不小心把这个py脚本当成模块导入 ,使得代码自动执行的。

__name__ 就是一个特殊的变量,当py脚本当成模块导入 __name__ 是不等于 '__main__' 的 , 只有把这个模块作为主程序直接运行时 __name__ =='__main__'

这里提醒一下包和模块的区别:

模块是一个单独的文件

包是一个文件夹 , 并且该文件夹下必须有一个 __init__.py这样的文件

os模块

os.remove("filename") # 删除一个文件
os.rename("oldname", "newname") # 重命名文件/目录
os.name # 输出字符串指示当前使用平台,后续判断系统会用到。win-> 'nt '; Linux->'posix'
os.system("bash command") # 运行shell命令,直接显示
os.path.isfile(path) # 如果path是一个存在的文件,返回True。否则返回False
os.path.isdir(path) # 如果path是一个存在的目录,则返回True。否则返回False
os.path.abspath('path') # 返回path规范化(符合平台的路径分隔符)的绝对路径
os.path.exists(path) # 如果path存在,返回True;如果path不存在,返回Falseos.path.isabs (path)如
果path是绝对路径,返回True
os.path.join(path1[, path2[,...]]) # 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略

time模块

# 时间分为三种格式
import time

# 1.时间戳:从1970年到现在经过的秒数
# 作用:用于时间间隔的计算
print(time.time())  # 1630411655.8108306
print(type(time.time()))  # <class 'float'>

# 2.按照某种格式显示的时间:2021-08-31 11:11:11
# 作用:用于展示时间
# %Y-%m-%d %H:%M:%S
# 年 月 日 时 分 秒
# %H:%M:%S == %X , %p代表上下午
print(time.strftime("%Y-%m-%d %H:%M:%S"))  # 2021-08-31 20:08:42
print(time.strftime("%Y-%m-%d %H:%M:%S %p"))  # 2021-08-31 20:08:42 PM
print(time.strftime("%Y-%m-%d %X"))  # 2021-08-31 20:08:42
print(type(time.strftime("%Y-%m-%d %X")))  # <class 'str'>

# 3.延时
time.sleep(3)  # 程序运行到这行代码的时候会延时3秒

random模块

import random

print(random.random())  # (0,1)----float 大于0且小于1之间的小数
print(random.randint(1, 3))  # [1,3] 大于等于1且小于等于3之间的整数
print(random.randrange(1, 3))  # [1,3) 大于等于1且小于3之间的整数
print(random.choice([1, '23', [4, 5]]))  # 1或者23或者[4,5]
print(random.sample([1, '23', [4, 5]], 2))  # 列表元素任意2个组合
print(random.uniform(1, 3))  # 大于1小于3的小数,如1.927109612082716
item = [1, 3, 5, 7, 9]
random.shuffle(item)  # 打乱item的顺序,相当于"洗牌"
print(item)

json模块

json.dumps():将 Python 对象序列化为 JSON 字符串。

例:json.dumps(dic): 将 Python 对象(这里是字典 dic)转换为 JSON 格式的字符串。

json.loads():将 JSON 字符串反序列化为 Python 对象。

例:json.loads(res): 将 JSON 格式的字符串res转换回 Python 对象(字典)。

json.dump():将 Python 对象序列化并写入文件。

例:json.dump(dic, f): 将 Python 对象(字典 dic)序列化为 JSON 格式并写入文件 f 中。

json.load():从文件中读取 JSON 数据并反序列化为 Python 对象。

例:json.load(f): 从文件 f 中读取 JSON 格式的数据并反序列化为 Python 对象。

re模块

在python中re模块是用来操作正则表达式的。

import re

# 1 匹配所有,返回列表
print(re.findall('e', 'alex make love'))  # ['e', 'e', 'e'],返回所有满足匹配条件的结果,放在列表里

# 2 匹配到第一个就停止匹配
print(re.search('e','alex make love').group())  # e,只到找到第一个匹配然后返回一个包含匹配信息的对象,该对象可以通过调用group()方法得到匹配的字符串,如果字符串没有匹配,则返回None。

# 3编译正则表达式 , 防止在for中重复编译, 节省内存, 提高效率
obj = re.compile('\d{2}')
print(obj.search('abc123eeee').group())  # 12
print(obj.findall('abc123eeee'))  # ['12'],重用了obj

# 4 用到可能最多的
print(re.findall('qq:(.*?),',
                 '下面是一些个人信息,李0,qq:123456789,李1,qq:123456789,李2,qq:123459,李3,qq:12389,李4,qq:12399999,李5,qq:123412349,'))  # ['123456789', '123456789', '123459', '12389', '12399999', '123412349']

# 5 默认 . 是不匹配换行的 , 可以使用 re.S 使.可以匹配\n
s = re.findall("好(.*?)你", "你好1123\n1123你", re.S)
print(s)  # ['1123\n1123']

base64模块

base64.b64encode()

base64.b64decode()

url模块

urllib.parse.quote():将字符串进行 URL 编码

urllib.parse.unquote():对经过 URL 编码的字符串进行解码

requests模块

requests 是一个第三方模块 , 我们可以通过pip3安装:pip3 install requests

基本使用

发送get请求

import requests

url = "https://www.baidu.com"
response = requests.get(url)

# 1.打印服务器返回的响应状态码
print(response.status_code) #200

# 2.打印服务器返回的响应内容 , 全部
print(response.text)

# # 3.保存到一个html文件
with open("./1.html", mode="w", encoding="utf-8") as f:
    f.write(response.text)
    
# 4.返回编码格式
print(response.encoding)  

# 5.设置编码格式
response.encoding = 'utf-8'

# 6.设置编码后再保存到一个html文件
with open("./2.html", mode="w", encoding="utf-8") as f:
    f.write(response.text)

发送post请求

import requests

url = "..." #省略
data = {
    "username": "admin",
    "password": "admin",
    "submit": "Login",
}
# post 请求提交的数据可以在python中通过字典格式提交,参数是第二个位置参数
response = requests.post(url, data=data)
print(response.status_code)  # 200

参数解释

# 请求方法
requests.方法名()
# 常见参数
url  # 请求的url
data  # post请求携带的请求体
headers  # 请求头
cookies  # cookies
timeout  # 等待时间
allow_redirects  # 是否运行重定向 , 默认是允许 true
proxies  # 代理 , 参数是字典类型 , 示例 :proxies = {"http": "http://10.10.1.10:3128", "https": "http://10.10.1.10:1080", }
verify  # ssl证书校验 , 默认是true

如有错漏,欢迎指正。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值