C# 站点IP访问频率限制 针对单个站点的实现方法
2016-12-02 09:15
876 查看
站点IP访问频率限制 针对单个站点
using System; using System.Collections.Generic; using System.IO; //using System.Linq; using System.Web; // <summary> // IP访问频率控制 // </summary> public static class IPCacheManager { /// <summary> /// IP缓存集合 /// </summary> private static List<IPCacheInfo> dataList = new List<IPCacheInfo>(); private static object lockObj = new object(); /// <summary> /// 一段时间内,最大请求次数,必须大于等于1 /// </summary> private static int maxTimes = 3; /// <summary> /// 一段时间长度(单位秒),必须大于等于1 /// </summary> private static int partSecond = 30; /// <summary> /// 请求被拒绝是否加入请求次数 /// </summary> private static bool isFailAddIn = false; static IPCacheManager() { } /// <summary> /// 设置时间,默认maxTimes=3, partSecond=30 /// </summary> /// <param name="_maxTimes">最大请求次数</param> /// <param name="_partSecond">请求单位时间</param> public static void SetTime(int _maxTimes, int _partSecond) { maxTimes = _maxTimes; partSecond = _partSecond; } /// <summary> /// 检测一段时间内,IP的请求次数是否可以继续请求 /// 和使用 /// </summary> /// <param name="ip"></param> /// <returns></returns> public static bool CheckIsAble(string ip) { lock (lockObj) { var item = dataList.Find(p => p.IP == ip); if (item == null) { item = new IPCacheInfo(); item.IP = ip; item.ReqTime.Add(DateTime.Now); dataList.Add(item); return true; } else { if (item.ReqTime.Count > maxTimes) { item.ReqTime.RemoveAt(0); } var nowTime = DateTime.Now; if (isFailAddIn) { #region 请求被拒绝也需要加入当次请求 item.ReqTime.Add(nowTime); if (item.ReqTime.Count >= maxTimes) { if (item.ReqTime[0].AddSeconds(partSecond) > nowTime) { return false; } else { return true; } } else { return true; } #endregion } else { #region 请求被拒绝就不需要加入当次请求了 if (item.ReqTime.Count >= maxTimes) { if (item.ReqTime[0].AddSeconds(partSecond) > nowTime) { return false; } else { item.ReqTime.Add(nowTime); return true; } } else { item.ReqTime.Add(nowTime); return true; } #endregion } } } } } public class IPCacheInfo { public string IP { get; set; } private List<DateTime> reqTime = new List<DateTime>(); public List<DateTime> ReqTime { get { return this.reqTime; } set { this.reqTime = value; } } }
以上这篇C# 站点IP访问频率限制 针对单个站点的实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章推荐
- C# 站点IP访问频率限制 针对单个站点
- C# 站点IP访问频率限制 针对单个站点
- PHP实现限制IP访问的方法
- 单个用户及Ip请求频率限制思路(附java实现)
- PHP实现限制IP访问及提交次数的方法详解
- asp实现限制一个ip只能访问一次的方法
- Java通过redis实现接口ip访问频率限制
- PHP实现IP访问限制及提交次数的方法详解
- C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 访问频率限制功能实现、防止黑客扫描、防止恶意刷屏
- 单个用户及Ip请求频率限制思路(附java实现)
- C#中显/隐式实现接口及其访问方法
- nginx中限制通过ip访问网站的方法
- 限制IP 访问 Oracle 的方法
- C#、VB.NET使用HttpWebRequest访问https地址(SSL)的实现方法
- 限制IP 访问 Oracle 的方法
- 124.115.0的IP段访问频繁造成网站空间负载过荷:限制搜搜蜘蛛抓取频率的参考方法
- 限制IP 访问 Oracle 的方法
- 利用IP扩展访问列表实现应用服务的访问限制
- IIS中限制访问IP设置方法
- 【求助】C# IIS站点限制特定的IP操作