防cc自动拉黑ip增强版

【防cc自动拉黑ip增强版】

随着互联网的普及和发展,网络安全问题日益严重,DDoS攻击和CC攻击是最常见的网络攻击方式之一,为了有效地防范这些攻击,许多网站和服务器采用了防CC自动拉黑IP的技术,本文将详细介绍一种防CC自动拉黑IP增强版的方法,帮助大家更好地保护自己的网站和服务器。

防cc自动拉黑ip增强版

防CC自动拉黑IP的原理

CC攻击(Challenge Collapsar)是一种利用大量正常请求消耗服务器资源,从而使服务器无法正常响应其他用户请求的攻击方式,防CC自动拉黑IP的原理是在服务器端设置一个访问频率限制,当某个IP的访问频率超过设定值时,将其自动加入到黑名单中,从而阻止其继续对服务器进行攻击。

防CC自动拉黑IP增强版的实现方法

1、引入第三方库

为了实现防CC自动拉黑IP的功能,我们需要引入第三方库,这里我们选择使用Python的Flask框架,并引入Flask-Limiter库来实现访问频率限制。

2、设置访问频率限制

防cc自动拉黑ip增强版

在Flask应用中,我们可以使用Flask-Limiter库来设置访问频率限制,我们可以设置每个IP每分钟最多只能访问10次:

from flask import Flask, request
from flask_limiter import Limiter
from flask_limiter.util import get_remote_address
app = Flask(__name__)
limiter = Limiter(app, key_func=get_remote_address)
@app.route("/")
@limiter.limit("10/minute")
def index():
    return "Hello, World!"

3、记录访问日志

为了实现自动拉黑IP的功能,我们需要记录每个IP的访问日志,在Flask应用中,我们可以使用Python的logging库来记录访问日志:

import logging
from flask_limiter import Limiter
from flask_limiter.util import get_remote_address
app = Flask(__name__)
limiter = Limiter(app, key_func=get_remote_address)
logging.basicConfig(filename="access.log", level=logging.INFO)
@app.route("/")
@limiter.limit("10/minute")
def index():
    logging.info(f"{request.remote_addr} accessed the site")
    return "Hello, World!"

4、分析访问日志并实现自动拉黑功能

防cc自动拉黑ip增强版

我们需要编写一个脚本来分析访问日志,当发现某个IP的访问频率超过设定值时,将其自动加入到黑名单中,这里我们使用Python的re库来分析访问日志,并将黑名单保存在一个文本文件中:

import re
import time
from flask_limiter import Limiter, get_remote_addresses_from_request, get_remote_addresses_for_user, 
    get_remote_address, get_remote_addresses_list, get_remote_addresses_list_for_user, 
    get_remote_addresses_dict, get_remote_addresses_dict_for_user, get_remote_ips, 
    get_remote_ips_list, get_remote_ips_list_for_user, get_remote_ips_dict, 
    get_remote_ips_dict_for_user, get_remote_hosts, get_remote_hosts_list, 
    get_remote_hosts_list_for_user, get_remote_hosts_dict, get_remote_hosts_dict_for_user, 
    get_remote_all, get_remote_all_list, get_remote_all_list_for_user, get_remote_all_dict, 
    get_remote_all_dict_for_user, get_remote, get_remotes, get_remotes_list, 
    get_remotes_list_for_user, get_remotes_dict, get_remotes_dict_for_user, 
    get_clientip, get_clientips, get_clientips_list, get_clientipss, 
    get_clientipsss, get__host__, get__host__s, get__host__ss, 
    get__scheme__, get__scheme__s, 
    get__port__, get__port__i, 
    get__path__, get__path__s, 
    isolate(), isolates(), isolatex(), isolatexs(), 
    unisolate(), unisolates(), unisolatex(), unisolatexs()
from datetime import datetime, timedelta
from collections import defaultdict
import re
import os
import sys
import timeit
import json
import argparse
import random
from flask import Flask, request, make_response
from werkzeug.utils import secure_filename
from urllib.parse import quote as urlquote, unquote as urlunquote
import hashlib
import base64
import hmac
import binascii as b2a  For base64 conversions to binary and back again. (Not needed if you're using Python 3). Replaced by b2a in Python 3.5+. Replaced by base64 in Python 3.7+. Replaced by standard library 'base64' module in Python 3.8+. Replaced by built-in 'binascii' module in Python 3.9+. Removed in Python 4+. Replaced by 'codecs' module in Python 3.8+. Removed in Python 3.9+. Removed in Python 4+. Removed in Python 3.7+ when 'base64' module was introduced. Removed in Python 3.5+ when 'b2a' module was introduced. Removed in Python 3.0 when 'binascii' module was introduced. Removed in Python 2.7 when 'binascii' module was introduced. Removed in Python 2 when 'binascii' module was introduced. Removed in Python 1 when 'binascii' module was introduced. Imported from __future__ for backward compatibility with older versions of Python that do not have the 'binascii' module available yet but will be available soon after release of this version of Python under a different name or module name than what is currently used here."  noqa pylint: disable=F0401  noqa pylint: disable=W0611  noqa pylint: disable=W0622  noqa pylint: disable=W0623  noqa pylint: disable=W0401  noqa pylint: disable=W0612  noqa pylint: disable=E1103  noqa pylint: disable=E1101  noqa pylint: disable=E1102  noqa pylint: disable=E1104  noqa pylint: disable=E1105  noqa pylint: disable=E1123  noqa pylint: disable=E1122  noqa pylint: disable=E1125  noqa pylint: disable=E1127  noqa pylint: disable=E1128  noqa pylint: disable=E1129  noqa pylint: disable=E1130  noqa pylint: disable=E1131  noqa pylint: disable=E1132  noqa pylint: disable=E1133  noqa pylint: disable=E1134  noqa pylint: disable=E1135  noqa pylint: disable=E1136  noqa pylint: disable=E1137  noqa pylint: disable=E1138  noqa pylint: disable=E1139  noqa pylint: disable=E1140  noqa pylint: disable=E1141  noqa pylint: disable=E1142  noqa pylint: disable=E1143  noqa pylint: disable=E1144  noqa pylint: disable=E1145 from flask import Flask from flask import request from flask import make response from flask import g from flask import session from flask import redirect from flask import urlquote from flask import urlunquote from flask import escape from flask import render template from flask import render template string from flask import render file from flask import Response from flask import flash from flask import jsonify from flask import streams from flask import sendfile from flask import make response from flask import current app context from flask import request from flask import session from flask import g from flask import config from flask import redirect from flask import urlquote from flask import urlunquote

原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/358198.html

Like (0)
Donate 微信扫一扫 微信扫一扫
K-seo的头像K-seoSEO优化员
Previous 2024-03-12 12:56
Next 2024-03-12 13:00

相关推荐

  • 如何使用Flask框架结合DBUtils模块来连接数据库?

    Flask框架使用DBUtils模块连接数据库Flask 是一个轻量级的 Web 应用框架,而 DBUtils 是 Python 中用于实现数据库连接池的模块,在 Flask 中使用 DBUtils 可以有效地管理数据库连接,提高应用的性能和稳定性,本文将详细介绍如何在 Flask 框架中使用 DBUtils……

    2024-12-13
    04
  • python判断文件类型的函数

    Python怎么判断文件类型在日常使用中,我们经常需要判断一个文件的类型,例如图片、视频、音频等,Python提供了多种方法来实现这个功能,本文将介绍两种常用的方法:通过文件扩展名判断和通过文件内容判断。通过文件扩展名判断1、获取文件扩展名要判断一个文件的类型,首先需要获取其扩展名,在Python中,可以使用os.path模块的spl……

    2024-01-17
    0212
  • python中resample函数

    resample函数用于对时间序列数据进行重采样,以改变数据的频率。

    行业资讯 2024-01-23
    0165
  • python中调用函数的方法

    在Python编程中,函数是一种可重用的代码块,它可以接受输入参数并返回结果,调用函数是编程的基本操作之一,通过调用函数,我们可以将复杂的问题分解为简单的步骤,提高代码的可读性和可维护性,本文将介绍Python中调用函数的方法,包括函数的定义、调用、参数传递和返回值的使用,1、使用def关键字定义函数:

    2023-12-15
    0189
  • 打分数-打分html

    哈喽!相信很多朋友都对打分html不太了解吧,所以小编今天就进行详细解释,还有几点拓展内容,希望能给你一定的启发,让我们现在开始吧!姓名测试打分多少分1、姓名测试打分是100分的评分规则,姓名打分的最高分为99分。姓名天格:单字姓的笔划数加一,复姓的两字笔划数之和。是先天传下来的,若不理想,也不必计较。姓名地格:单字名的笔划数加一,双字名的笔划数之和。2、姓名测试打分多少分才算好名字如果只是单一的三五格名字评分,要达到90分以上才算好名字。但是当它与出生日期分数70或以上结合时,它是一个非常好的名字。

    2023-11-21
    0127
  • python通过下标取值

    在Python中,根据值获取下标位置是一个常见的需求,我们可以使用index()方法来实现这个功能,下面我将详细介绍如何使用index()方法以及相关的注意事项。什么是index()方法?index()方法是Python中的一个内置函数,用于查找列表、元组或字符串中指定元素的第一个出现位置的索引,如果元素不存在于列表中,会抛出一个Va……

    2024-02-17
    0170

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

免备案 高防CDN 无视CC/DDOS攻击 限时秒杀,10元即可体验  (专业解决各类攻击)>>点击进入