Cache 判断Ip几分钟内攻击次数

要做一个防止一个Ip攻击网站的功能,想到了使用Cache,里面有Add  和  Insert方法。方法中有很多参数,他是以key-Value 方式存储,区别在于,Add方法一旦创建,里面的数据不可以修改。Inset 可以key不变修改 value参数。

设计思路是这样的,key为ip,value 为次数。代码如下:

 1  /// <summary>
 2         /// 获取当前应用程序指定CacheKey的Cache值
 3         /// </summary>
 4         /// <param name="CacheKey"></param>
 5         /// <returns></returns>
 6         public static object GetCache(string CacheKey)
 7         {
 8             System.Web.Caching.Cache objCache = HttpRuntime.Cache;
 9             return objCache[CacheKey];
10         }
11
12         /// <summary>
13         /// 设置当前应用程序指定CacheKey的Cache值
14         /// </summary>
15         /// <param name="CacheKey"></param>
16         /// <param name="objObject"></param>
17         /// <param name="m">分钟</param>
18         public static void SetCache(string CacheKey, object objObject, int m)
19         {
20             System.Web.Caching.Cache objCache = HttpRuntime.Cache;
21             objCache.Insert(CacheKey, objObject, null, DateTime.Now.AddMinutes(m), Cache.NoSlidingExpiration);
22         }
23         /// <summary>
24         ///
25         /// </summary>
26         /// <param name="ip"></param>
27         /// <param name="duration">时常(分钟)</param>
28         /// <param name="count"> 访问量最大阀门值</param>
29         /// <returns></returns>
30         public static bool IpConfig(string ip, int duration = 1, int count = 10)
31         {
32             bool result = false;
33             string urlIndex = "~/css/IpConfig.xml";
34             string FileName = System.Web.HttpContext.Current.Server.MapPath(urlIndex);
35             XDocument doc = XDocument.Load(FileName);
36
37             var rel = from p in doc.Descendants("item") where p.Attribute("ip").Value.ToLower() == ip select p;
38             result = (rel != null && rel.Count() > 0) ? true : false;
39             if (!result)
40             {
41                 object obj = null;
42                 if (string.IsNullOrWhiteSpace(ip)) { result = true; }
43                 else
44                 {
45                     obj = GetCache(ip);
46                     if (obj != null)
47                     {
48                         int _count = (int)obj;
49                         if (_count >= count)
50                         {
51                             if (_count == count)
52                             {
53                                 insertIP(ip);
54                                 sendmobile(ip);
55                             }
56                             return true;
57                         }
58                         else
59                         {
60                             System.Web.Caching.Cache objCache = HttpRuntime.Cache;
61                             objCache.Insert(ip, _count + 1, null, DateTime.Now.AddSeconds(duration), Cache.NoSlidingExpiration);
62                         }
63                     }
64                     else
65                     {
66                         SetCache(ip, 1, duration);
67                     }
68                 }
69             }
70             return result;
71         }
72
73
74         #region 将IP插入到XML中
75         public static void insertIP(string ip)
76         {
77             string urlIndex = "~/css/IpConfig.xml";
78             string FileName = System.Web.HttpContext.Current.Server.MapPath(urlIndex);
79             XmlDocument xmlDoc = new XmlDocument();
80             xmlDoc.Load(FileName);
81             XmlNode root = xmlDoc.SelectSingleNode("root");
82             XmlNode root0 = root.ChildNodes.Item(0);
83             XmlElement xe1 = xmlDoc.CreateElement("item");
84             xe1.SetAttribute("ip", ip);
85
86             root0.AppendChild(xe1);
87             xmlDoc.Save(FileName);
88         }
89         #endregion
90
91        
时间: 2024-10-10 06:30:59

Cache 判断Ip几分钟内攻击次数的相关文章

Java 判断IP地址为内网IP还是公网IP

tcp/ip协议中,专门保留了三个IP地址区域作为私有地址,其地址范围如下: 10.0.0.0/8:10.0.0.0-10.255.255.255 172.16.0.0/12:172.16.0.0-172.31.255.255 192.168.0.0/16:192.168.0.0-192.168.255.255 那么,直接上代码吧: public static boolean internalIp(String ip) { byte[] addr = IPAddressUtil.textToNu

日志分析 &nbsp; 取出访问最多的IP,URL,以及五分钟内的访问流量

日志分析! 对最近五分钟的日志进行分析,取出访问最多的IP,URL,以及五分钟内的访问流量 #!/bin/sh name=`cat /etc/salt/minion | grep "^id" | awk '{print $2}'` ipaddr=`/sbin/ifconfig | grep "inet addr" | egrep -v "10\.|127\." | awk  -F'[: ]+' '{print $4}'` #LogPath='/u

如何快速判断IP是内网还是外网(转)

TCP/IP协议中,专门保留了三个IP地址区域作为私有地址,其地址范围如下: 10.0.0.0/8:10.0.0.0-10.255.255.255 172.16.0.0/12:172.16.0.0-172.31.255.255 192.168.0.0/16:192.168.0.0-192.168.255.255 使用保留地址的网络只能在内部进行通信,而不能与其他网络互连.如果要与外部通信,那么必须通过网关与外部通信,这里使用了NAT, NAPT技术就是用来保证通信的代理机制. 提示:上述IP地址

sql server 大数据, 统计分组查询,数据量比较大计算十分钟内每秒钟执行次数

-- 数据量比较大的情况,统计十分钟内每秒钟执行次数 declare @begintime varchar(100); -- 开始时间 declare @endtime varchar(100); -- 结束时间 declare @num int; -- 结束时间 set @begintime = '2019-08-10 09:10:00' -- 开始时间 set @endtime = '2019-08-10 09:20:00' -- 结束时间 set @num = (select count(

用十条命令在一分钟内检查 Linux 服务器性能

原文地址: http://www.oschina.net/news/69132/linux-performance 如果你的Linux服务器突然负载暴增,告警短信快发爆你的手机,如何在最短时间内找出Linux性能问题所在?来看Netflix性能工程团队的这篇博文,看它们通过十条命令在一分钟内对机器性能问题进行诊断. 概述 通过执行以下命令,可以在1分钟内对系统资源使用情况有个大致的了解. uptime dmesg | tail vmstat 1 mpstat -P ALL 1 pidstat 1

用十条命令在一分钟内检查Linux服务器性能

如果你的Linux服务器突然负载暴增,告警短信快发爆你的手机,如何在最短时间内找出Linux性能问题所在?Netflix性能工程团队的Brendan Gregg写下了这篇博文,兄弟连Linux培训 小编整理如下:一起来看他们是怎样通过十条命令在一分钟内对机器性能问题进行诊断. 概述 通过执行以下命令,可以在1分钟内对系统资源使用情况有个大致的了解. uptime dmesg | tail vmstat 1 mpstat -P ALL 1 pidstat 1 iostat -xz 1 free -

用十条命令在一分钟内检查Linux服务器性能[转]

概述 通过执行以下命令,可以在1分钟内对系统资源使用情况有个大致的了解. uptime dmesg | tail vmstat 1 mpstat -P ALL 1 pidstat 1 iostat -xz 1 free -m sar -n DEV 1 sar -n TCP,ETCP 1 top 其中一些命令需要安装sysstat包,有一些由procps包提供.这些命令的输出,有助于快速定位性能瓶颈,检查出所有资源(CPU.内存.磁盘IO等)的利用率(utilization).饱和度(satura

nginx限制某个IP同一时间段的访问次数

如何设置能限制某个IP某一时间段的访问次数是一个让人头疼的问题,特别面对恶意的ddos攻击的时候.其中CC攻击(Challenge Collapsar)是DDOS(分布式拒绝服务)的一种,也是一种常见的网站攻击方法,攻击者通过代理服务器或者肉鸡向向受害主机不停地发大量数据包,造成对方服务器资源耗尽,一直到宕机崩溃. cc攻击一般就是使用有限的ip数对服务器频繁发送数据来达到攻击的目的,nginx可以通过HttpLimitReqModul和HttpLimitZoneModule配置来限制ip在同一

如何用十条命令在一分钟内检查Linux服务器性能

如果你的Linux服务器突然负载暴增,报警短信快发爆你的手机,如何在最短时间内找出Linux性能问题所在?来看Netflix性能工程团队的这篇博文,看它们通过十条命令在一分钟内对机器性能问题进行诊断. 概述 通过执行以下命令,可以在1分钟内对系统资源使用情况有个大致的了解. uptime dmesg | tail vmstat 1 mpstat -P ALL 1 pidstat 1 iostat -xz 1 free -m sar -n DEV 1 sar -n TCP,ETCP 1 top 其