当前位置: 首页 > 编程笔记 >

C# 站点IP访问频率限制 针对单个站点的实现方法

华欣怡
2023-03-14
本文向大家介绍C# 站点IP访问频率限制 针对单个站点的实现方法,包括了C# 站点IP访问频率限制 针对单个站点的实现方法的使用技巧和注意事项,需要的朋友参考一下

 站点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访问频率限制 针对单个站点的实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持小牛知识库。

 类似资料:
  • 本文向大家介绍PHP实现限制IP访问的方法,包括了PHP实现限制IP访问的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了PHP实现限制IP访问的方法。分享给大家供大家参考,具体如下: 更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP网络编程技巧总结》、《php正则表达式用法总结》、《php curl用法总结》、《PHP数组(Array)操作技巧大全》、《php字符串(str

  • 使用OpenSUSE v15.2, Apache. 使用zypper安装了PHP-FPM。遵循本网站上的说明:https://en.opensuse.org/SDB:Apache_FastCGI_and_PHP-FPM_配置 我重新启动了Apache和PHP-FPM。但是,网站未加载到浏览器中。 我得到HTTP错误502。 #####################################

  • 本文向大家介绍linux下统计appche站点IP访问量的shell脚本,包括了linux下统计appche站点IP访问量的shell脚本的使用技巧和注意事项,需要的朋友参考一下 经常需要根据IP地址统计apache站点访问量,最基本的脚本. 根据IP访问量降序排列: 执行效果: 打印访问量前三的IP地址: 执行效果: apache站点访问错误统计: 执行效果:

  • 本文向大家介绍Django 限制用户访问频率的中间件的实现,包括了Django 限制用户访问频率的中间件的实现的使用技巧和注意事项,需要的朋友参考一下 一、定义限制访问频率的中间件 common/middleware.py 二、将中间件加入配置文件 setting.py 对使用 rest_framework 框架的项目来说,可以使用框架的设置来对api的访问频率进行限制 以上就是本文的全部内容,希

  • 本文向大家介绍asp.net实现拒绝频繁的IP访问的方法,包括了asp.net实现拒绝频繁的IP访问的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了asp.net实现拒绝频繁的IP访问的方法。分享给大家供大家参考,具体如下: 首先我们要实现 IHttpModule接口 ListIp 类 在web.config 配置访问规则 更多关于asp.net相关内容感兴趣的读者可查看本站专题:《

  • 1. 创建站点 一般情况下,您需要在百度统计中创建站点才能获取跟踪代码及查看网站数据。 具体创建步骤: 登录百度统计,选择“管理->网站列表”标签; 点击页面右上方“新增网站”按钮,弹出新建对话框: 输入网站域名,域名格式不正确,将无法创建。 可输入如下4种域名形式: 主域名(如:www.baidu.com) 二级域名(如:sub.baidu.com) 子目录(如:www.baidu.com/su