wrk泛洪攻击监控脚本

news/2024/11/25 8:24:10/

wrk泛洪攻击介绍

        WRK泛洪攻击(WRK Flood Attack)是一种基于WRK工具进行的DDoS攻击(分布式拒绝服务攻击)。WRK是一个高度并行的HTTP负载生成器,可以模拟大量用户访问一个网站,从而导致该网站服务器瘫痪或失效。

        WRK泛洪攻击的原理是,通过大量仿真的HTTP请求和响应来占用网站服务器的资源,使其无法正常处理真实用户的请求。攻击者会使用一组代理服务器来反复发送请求,从而增加攻击的威力,使目标服务器癱瘓。

        在WRK泛洪攻击中,攻击者可以设置一些参数来控制攻击规模和持续时间,如并发请求数、请求频率、请求协议等。这种攻击方式往往需要大量的计算资源和带宽,因此需要进行计算和网络资源的收集和使用,同时攻击难度也相对较高,需要一定的技术水平。

        WRK泛洪攻击对于网站服务器而言是一种非常严重的威胁,可以造成大量的损失和影响。因此,网站管理员需要采取一些有效的保护措施来防范此类攻击,如加大服务器处理能力、增加带宽容量、使用DDoS防护技术、提高系统的安全性等。

脚本监控指标

该脚本监控的指标包括:

  1. 网络连接数:检测与端口80的连接数(使用netstat和ss命令);
  2. 系统负载均衡:使用uptime命令获取系统负载均衡数据;
  3. 访问日志情况:检测最近一千条访问日志中404状态码的数目(使用tail和grep命令)。

当网络连接数、系统负载均衡或404日志数等任一指标超过设定的阈值时,脚本使用iptables命令封锁当前访问量最高的IP地址,从而阻止DDoS攻击。

使用方法如下

  1. 将脚本保存为.py文件;
  2. 在终端中进入该文件所在的目录,执行命令:
    python filename.py
    
    其中filename.py为脚本文件名;
  3. 等待wrk工具启动;
  4. 监控泛红攻击,当达到设定的阈值时,脚本会自动封锁IP并退出。

需要注意的是,该脚本需要权限才能使用iptables命令,因此需要使用root用户或sudo命令执行。

完整代码如下:

import os
import subprocess
import time"""检测网络连接情况"""
def check_connections():# 通过 netstat 命令统计与端口80的连接数netstat_result = subprocess.check_output('netstat -an | grep :80 | wc -l', shell=True)# 通过 ss 命令统计与端口80的连接数ss_result = subprocess.check_output('ss -lnt | grep :80 | wc -l', shell=True)# 计算总连接数connections = int(netstat_result.strip()) + int(ss_result.strip())return connectionsdef check_load():"""检测系统负载情况"""# 执行 uptime 命令,获取系统负载均衡数据result = subprocess.check_output('uptime', shell=True)# 将结果转化为字符串result_str = result.decode('utf-8')# 根据空格分割字符串并获取最后三个元素(即负载均衡)load_avg = result_str.split()[-3:]# 将负载均衡前面的逗号去掉,并将结果转化为浮点数类型load_avg_str = load_avg[0].strip(',')return float(load_avg_str)def check_logs():"""检测访问日志情况"""# 查看日志文件,检索恶意IPresult = subprocess.check_output('tail -n 1000 /opt/lampp/logs/access_log | grep \' 404 \' | wc -l', shell=True)return int(result.strip())def block_ip(ip):"""使用iptables命令封锁IP"""# 将IP通过防火墙加入黑名单os.system('iptables -I INPUT -s {} -j DROP'.format(ip))print('IP {} blocked.'.format(ip))def main():# 泛红攻击检测阈值MAX_CONNECTIONS = 500MAX_LOAD = 2.0MAX_LOGS = 100# 等待wrk工具启动time.sleep(5)# 循环检测泛红攻击while True:connections = check_connections()load = check_load()logs = check_logs()print('Connections: {}, Load: {}, Logs: {}'.format(connections, load, logs))if connections > MAX_CONNECTIONS or load > MAX_LOAD or logs > MAX_LOGS:# 监测到泛红攻击,封锁IPip = subprocess.check_output('netstat -an | grep :80 | awk \'{print $5}\' | cut -d: -f1 | sort | uniq -c | sort -nr | head -n 1 | awk \'{print $2}\'', shell=True)block_ip(ip.strip())breaktime.sleep(5)if __name__ == '__main__':main()

http://www.ppmy.cn/news/68878.html

相关文章

ChatGPT生成Excel统计公式——检查数据是否满足要求

背景需求 有一张表格如下,需要统计每个用户是否在第一到第三周中,每周发文数量都大于等于两篇,是的话给出Yes,否的话给出No 操作流程 给出描述,让ChatGPT生成对应的公式,条件如下: 在excel中…

【算法】【算法杂谈】将路径数组变为统计数组(单数组的调整与转换)

目录 前言问题介绍解决方案代码编写java语言版本c语言版本c语言版本 思考感悟写在最后 前言 当前所有算法都使用测试用例运行过,但是不保证100%的测试用例,如果存在问题务必联系批评指正~ 在此感谢左大神让我对算法有了新的感悟认识! 问题介…

Python 爬虫(一):爬虫伪装

1 简介 对于一些有一定规模或盈利性质比较强的网站,几乎都会做一些防爬措施,防爬措施一般来说有两种:一种是做身份验证,直接把虫子挡在了门口,另一种是在网站设置各种反爬机制,让虫子知难而返。 2 伪装策…

从零开始Vue3+Element Plus后台管理系统(六)——状态管理Pinia和持久化

Pinia 官网:https://pinia.vuejs.org/zh/ Pinia 是 Vue 的专属状态管理库,相比Vuex更好用,优点不多了说官网有,用起来最重要! 在应用的根部注入创建的 pinia // main.ts import { createApp } from vue import { c…

代码量原地缩减50%,这个Java工具类库太香了

Guava是google公司开发的一款Java类库扩展工具包,内含了丰富的API,涵盖了集合、缓存、并发、I/O等多个方面。使用这些API一方面可以简化我们代码,使代码更为优雅,另一方面它补充了很多jdk中没有的功能,能让我们开发中更…

构造函数(包括默认构造函数) ,析构函数的使用与特性

文章目录 一、构造函数二、默认构造函数(也是构造函数)默认构造函数的种类:1.无参类型2.全缺省类型3.编译器自动生成的4.汇总 三、析构函数 一、构造函数 构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象时由编译器自…

汇编五、伪指令与汇编程序结构

1、伪指令 1.1、概念 (1)伪指令是用于对汇编过程进行控制的指令,该类指令并不是可执行指令,没有对应机器码,只用于汇编过程中为汇编程序提供汇编信息,帮助编译器编译。 1.2、ASM51提供的伪指令 伪指令分为如下几类。 1.2.1、…

SpringSecurity 一文彻底掌握

文章目录 前言一、SpringSecurity Web方案🍓Test Controller 测试请求控制器🤣SpringSecurity 基本原理🌍代码底层流程:重点看三个过滤器FilterSecurityInterceptor 方法级的权限过滤器ExceptionTranslationFilter 异常过滤器User…