最近又需要做一个简单的ip访问限制。这一次经别人提醒,学到了另外一种方法去实现。这次是用memcache实现的。
需求:限制单个ip地址单位时间内的访问次数,比如5分钟内10次。
实现方法1:python + memcache
原理: 分析条件就是要知道这个ip在哪段时间内?当前的访问次数是多少?
准备工作是安装memcache和python的客户端
思路:把ip作为key,把一个unix时间戳和这个ip的访问次数用'-'分隔符一起作为value, set到memcache中。 当一个新的ip地址来的时候先set,然后如果这个ip地址不是第一次来的话,就要判断做3个逻辑。
第一个:如果这个ip在单位时间内访问次数已经等于或者大于限制的次数的话就返回True表示要限制这个ip地址的访问次数了。
第二个:如果这个ip地址在单位时间内访问次数没有超过限制次数,那么就访问次数+1
第三个:如果这个ip地址超过了单位时间内仍然没有超过限制,那么就把当前unix时间刷新到value中,并把访问次数置为1.
以下是实现代码:
import memcache
def ip_limit(ip):
'''
return True if need to limit ip, otherwise return False
'''
sep = '-'
mc = memcache.Client(['127.0.0.1:11211'], debug=0)
now = int(time.time())
value = mc.get(ip)
if not value:
#set this ip the first time to access
#format is time-count
v = '%s%s%s' % (str(now), sep, '1')
mc.set(ip, v)
return False
else:
#last_access_time and access_times is string
value_list = value.split(sep)
#now last_access_time and access_times is int
last_access_time, access_times = int(value_list[0]), int(value_list[1])
if (now - last_access_time) <= config.IP_COLD_TIME and access_times >= config.IP_MAX_ACCESS_TIMES:
return True
elif (now - last_access_time) <= config.IP_COLD_TIME:
access_times += 1
mc.set(ip, '%s%s%s' % (str(last_access_time), sep, str(access_times)))
return False
else:
mc.set(ip, '%s%s%s' % (str(now), sep, '1'))
return False
代码里面的config是一个config.py文件,用配置的方式配置多长时间(单位:秒)IP_COLD_TIME 和 要限制的访问次数
IP_MAX_ACCESS_TIMES, 方便随时可以修改。
实现方法2: 用python+数据库mysql
具体: 建立一张ip表,表结构很简单:ip_table(ip, varchar 20, access_time int)
查询有没有在单位时间内超过限制次数的逻辑大概如下:
def limit_ip(ip, now):
"""
return True if need to limit ip,otherwise return False
@ip: ip address that is 'xxx.xxx.xxx.xxx'
@now: unix time, int
"""
sql = """SELECT COUNT(*) AS times FROM ip_table WHERE ip = %s and access_time > %s and access_time < %s"""
access_times = conn.query(sql, (ip, now - config.IP_COLD_TIME, now))[0]["times"]
if access_times < config.IP_MAX_ACCESS_TIMES and access_times >= 0:
return False
return True
插入ip就很简单了,直接insert就可以 了。
欢迎有其他ip限制方法的分享和有经验的童鞋拍砖!
分享到:
相关推荐
### Nginx IP限制配置详解 #### 背景与目的 在Web服务器管理与运维过程中,为了确保网站的安全性和稳定性,常常需要对访问来源进行控制。Nginx作为一款高性能的HTTP服务器和反向代理服务器,提供了丰富的功能来实现...
在互联网应用中,为了防止恶意爬虫或者滥用服务,很多网站和服务器会实施IP限制策略,尤其是对于频繁访问的行为。在这种背景下,Java开发者可能需要处理“动态换IP限制 IP频繁限制”的问题。本文将深入探讨如何在...
《Zookeeper 3.4.14 IP限制功能详解及源码改造》 Apache ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作。...
PHP限制国内IP,PHP限制IP,PHP限制IP段
"IP地址段的过滤,限制IP,限制主机访问"这个主题涉及到如何通过编程手段实现对网络访问的精细化管理,尤其是在Java Web环境中。以下是一些相关的知识点: 1. **IP地址与主机名**:IP地址是互联网上设备的唯一标识...
iis7,iis7.5外置模块增加iis动态ip地址限制。。。。。
php限制ip访问次数.txt php限制ip访问次数.txt php限制ip访问次数.txt php限制ip访问次数.txt
"IP限制策略" IP限制策略是指在服务器上设置访问控制,以阻止所有IP的访问,并允许特定的IP访问服务器。该策略可以在Windows操作系统上实现,通过本地安全策略中的IP安全策略来实现。 在实现IP限制策略时,需要...
在网络安全管理中,限制特定IP访问远程桌面是一种有效的安全措施,可以防止未经授权的用户尝试登录并控制服务器。本文将详细讲解如何通过IP安全策略来设置这一限制,以增强服务器的安全性。 首先,我们需要理解IP...
Linux IP 访问限制教程 Linux 系统中,IP 访问限制是非常重要的一方面,为了确保系统的安全,我们需要限制某些 IP 的访问权限,避免恶意攻击和未经授权的访问。本教程将介绍两种方法来限制 IP 访问权限:使用 `/etc...
### VBScript IP限制访问代码详解 #### 一、概述 在Web开发中,有时为了安全考虑或资源管理的需要,我们需要限制某些特定IP地址或IP段的访问。本篇文章将详细解析一段用VBScript编写的IP限制访问代码,并对其中...
IP访问限制ASP程序(可加入后台) 1.0 介绍: #fceywz_ip 文件夹:数据库文件夹 里面的#fceywz_ip.asa是ACCSEE2003数据库 ip.asp 管理可访问网页的IP地址管理; ip_tj.asp 添加新的IP地址; ip_xg.asp 修改IP...
首先,让我们了解IP限制的基本概念。IP地址是互联网上的唯一标识符,用于定位网络设备。限制特定IP地址访问版块意味着只有拥有允许访问的IP地址的用户才能浏览或参与该版块的讨论。这通常用于保护敏感信息、防止恶意...
【IP地址过滤限制系统】是一种网络管理技术,用于控制网络访问权限,确保网络安全并防止恶意活动。该系统通过识别和管理接入网络的设备IP地址,实现对特定用户或设备的访问权限设定。以下是对该系统及其相关文件的...
对于一个IP段区域做限制访问,譬如,对校院站点资源限制校园以外的电脑访问.
要使用JavaScript实现Cookie的IP限制,我们需要在设置Cookie时记录该Cookie关联的IP地址。以下是一个简单的示例: ```javascript function setCookie(name, value, days, ipAddress) { var expires = ''; if ...
php限制访问ip
远程桌面端口修改及限制IP访问 远程桌面端口修改及限制IP访问是指在远程桌面连接中修改默认的3389端口号,并限制访问的IP地址,以确保服务器的安全。下面是详细的知识点: 一、远程桌面端口修改: 1. 打开注册表 ...
设置 IIS 限制 IP 访问网站 设置 IIS 限制 IP 访问网站是指通过 IIS 管理器限制某些 IP 地址或域名访问特定网站目录,以提高网站的安全性。本文将详细介绍设置 IIS 限制 IP 访问网站的步骤和相关知识点。 一、为...
然而,有时候用户可能会觉得IP-GUARD的某些限制过于严格或者想要研究其工作原理,因此出现了“一键解除销毁IP-GUARD3.0限制”的需求。 标题中的“一键解除销毁IP-GUARD3.0限制”指的是通过特定的脚本或工具来移除IP...