Django 中间件之限制ip访问次数 和 黑名单
限制ip访问频率
import time
from django.utils.deprecation import MiddlewareMixin
from django.http.response import HttpResponse
from django.core.cache import caches# 频率限制访问
class IpLimitMiddleware(MiddlewareMixin):def process_request(self,request):ip = request.META.get("REMOTE_ADDR")# 选择缓存的数据库 redis缓存cache = caches['redis_backend']# 首先缓存中,根据ip获取数据,假如没有数据,值为空列表 []requests = cache.get(ip,[])# 如果值存在,且当前时间 - 最后一个时间 > 30 则清洗掉这个值 这里我们插入请求的时间为头插while requests and time.time() - requests[-1] > 30:requests.pop()# 若没有存在值,则添加,过期时间为30秒,这个过期时间与上面判断的30 保持一致requests.insert(0, time.time())cache.set(ip, requests, timeout=30)# 限制访问次数为 5 次print(len(requests))if len(requests) > 5:return HttpResponse("请求过于频繁,请稍后重试!")
黑名单
import time
from django.utils.deprecation import MiddlewareMixin
from django.http.response import HttpResponse
from django.core.cache import caches# 频率限制访问
class IpLimitMiddleware(MiddlewareMixin):def process_request(self,request):ip = request.META.get("REMOTE_ADDR")# 选择缓存的数据库 redis缓存cache = caches['redis_backend']# 获取黑名单black_list = cache.get('black',[])if ip in black_list:return HttpResponse("黑名单用户!")requests = cache.get(ip,[])# 如果值存在,且当前时间 - 最后一个时间 > 30 则清洗掉这个值 这里我们插入请求的时间为头插while requests and time.time() - requests[-1] > 60:requests.pop()# 若没有存在值,则添加,过期时间为30秒,这个过期时间与上面判断的30 保持一致requests.insert(0, time.time())cache.set(ip, requests, timeout=60)# 如果访问次数大于30次,假如黑名单,封2分钟if len(requests) > 30:black_list.append(ip)cache.set('black',black_list,timeout=60*2)# 限制访问次数为 5 次print(len(requests))if len(requests) > 5:return HttpResponse("请求过于频繁,请稍后重试!")
Django 中间件之限制ip访问次数 和 黑名单相关推荐
- 限制同一IP访问次数,csrf,分页,Paginator,内建用户系统,文件上传,上传到本地
中间件的使用 限制同一IP访问次数 1.获取远程客户端的IP地址 request.META['REMOTE_ADDR'] 2.得到客户端访问的请求路由信息 request.path_info 创建一个 ...
- linux日志生成速率统计,Linux学习29-awk提取log日志信息,统计日志里面ip访问次数排序...
前言 有一段log日志,需从日志里面分析,统计IP访问次数排序前10名,查看是否有异常攻击. 日志提取 如下日志,这段日志包含的信息内容较多,我们希望提取ip,访问时间,请求方式,访问路径(不带参数) ...
- 用户IP访问次数统计
技术源于生活,服务生活 线上地址:https://api.imibi.cn Redis存储 1.使用Redis的0号数据库,数据格式是hash. import redis con = redis.Re ...
- python读取日志统计ip_使用python脚本实现统计日志文件中的ip访问次数
使用python脚本实现统计日志文件中的ip访问次数,注意此脚本只适用ip在每行开头的日志文件,需要的朋友可以参考下 适用的日志格式: 106.45.185.214 - - [06/Aug/2014: ...
- php限制ip访问次数 并发_[转]nginx限制某个IP同一时间段的访问次数
如何设置能限制某个IP某一时间段的访问次数是一个让人头疼的问题,特别面对恶意的ddos攻击的时候.其中CC攻击(Challenge Collapsar)是DDOS(分布式拒绝服务)的一种,也是一种常见 ...
- 统计日志中ip访问次数并排序的三种方法
1 利用linux中的awk命令 grep "GET aaa.log | awk -F " " '{print $NF}' >d:/test.log 假设日志的最 ...
- linux 访问日志ip排序,Linux通过日志文件统计IP访问次数排序
假设我的日志文件内容如下: 218.92.217.53 - - [22/Nov/2017:17:26:27 +0800] "GET /images/rand HTTP/1.0" 2 ...
- ip访问次数统计 nginx_Linux分析Nginx日志统计IP访问次数的shell脚本
平时运维遇到最多的就是nginx的日志分析了,要时常做系统监控,检查IP的访问次数是否有异常,防止恶意访问. 假设我的nginx日志如下: ....... 211.253.43.23 - - [03/ ...
- php限制ip访问次数 并发_PHP实现redis限制单ip、单用户的访问次数功能示例
本文实例讲述了PHP实现redis限制单ip.单用户的访问次数功能.分享给大家供大家参考,具体如下: 有时候我们需要限制一个api或页面访问的频率,例如单ip或单用户一分钟之内只能访问多少次 类似于这 ...
最新文章
- OpenCV copyTo() 函数实现图片交集
- 运筹学两阶段法编程c语言,运筹学上机实验 - 单纯形方法的两阶段法
- 《为自己工作——世界顶级设计师成功法则》—第1章1.7节平衡
- 经典C语言程序100例之六六
- vue3与vue2的详细区别
- Python3 标准库及相关内容
- IBM收购数据库安全公司 围剿Oracle之心不死
- 买了社保,再买农村医保是不是多余?
- 在线OPML美化格式化工具
- 关于内容管理系统IWMS的几个问题
- 2022 数学建模B题成品论文 参考文章 含全部建模 步骤 数学模型 图像
- 虚拟机实验Windows10备份和还原
- Navicat获取注册码
- BMP(DIB)图片格式
- 差分编码解析以及FPGA实现
- ise 检查文件语法错误
- JavaScript document对象
- Kanzi入门学习(一)
- dnf命令 (常用总结)
- 怎么画思维导图?玩转MindNow六大思维结构
热门文章
- 解线性方程组的直接法
- 思科模拟器——RIP协议
- 遇到问题---tomcat启动报错--startup failed due to previous errors
- matlab画图中该如何标注途中的某一点,以SIR模型为例
- //12、设计人民币类,其数据成员为fen(分)、jiao(角)、yuan(元)。重载这个类的加法、减法运算符,并给出主函数应用该类。
- 基于JavaWeb的个人空间个人网站个人博客系统设计与实现
- Macbook非常好用的一些功能
- 一个项目经理必备的素质
- c#和python更适合爬虫_Python2和Python3哪个更适合初学者学习来爬虫
- Java程序员兼职平台推荐