如何在global.asax里封杀 请求太频繁的IP
怎么在global.asax里封杀 请求太频繁的IP?
怎么在global.asax里封杀 请求太频繁的IP?
------解决思路----------------------
1. 取得IP
2. 在黑名单里查询是否存在一个IP与之相符。如果存在,则
2.1 服务器重定向到 http://www.google.com 去
如果不会从 HttpContext 获得客户端 IP,请去学习 asp.net。
如果不会访问数据库,请去学习 sql 知识,以及 ado.net。
如果不会 HttpContext 服务器重定向,请去学习 asp.net。
------解决思路----------------------
怎么在global.asax里封杀 请求太频繁的IP?
------解决思路----------------------
1. 取得IP
2. 在黑名单里查询是否存在一个IP与之相符。如果存在,则
2.1 服务器重定向到 http://www.google.com 去
如果不会从 HttpContext 获得客户端 IP,请去学习 asp.net。
如果不会访问数据库,请去学习 sql 知识,以及 ado.net。
如果不会 HttpContext 服务器重定向,请去学习 asp.net。
------解决思路----------------------
//请求信息
public class VisitItem
{
public string IP { get; set; }
public DateTime VisitTime { get; set; }
}
public class VisitValidate
{
//缓存请求的IP及时间列表
public static List<VisitItem> VisitItems = new List<VisitItem>();
//判断是否频繁访问
public static bool IsFrequent(string ip)
{
VisitItems.Add(new VisitItem() { IP = ip, VisitTime = DateTime.Now });
//清空多余的缓存记录,只取最近十次访问
var list = VisitItems.Where(m => m.IP.Equals(ip)).ToList();
while (list.Count > 10)
{
list.RemoveAt(0);
}
//找到list中的最大最小时间,以计算最近十次请求的时间间隔
DateTime dmin = VisitItems.Min(m => m.VisitTime);
DateTime dmax = VisitItems.Max(m => m.VisitTime);
int span = (dmax - dmin).Milliseconds;
//如果平均间隔在100毫秒认为过于频繁
if (span / list.Count > 100)
{
return true;
}
else
{
return false;
}
}
}