`
圣诞王子
  • 浏览: 83308 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

asp.net防类似DDOS攻击(CC攻击)代码

 
阅读更多

asp.net防类似DDOS攻击(CC攻击)代码

Web.config
 
<httpModules>
 <!–Url重写–>
 <add type=”UrlRewriter.RewriterHttpModule, UrlRewriter” name=”UrlRewriter”/>
 <!–防类似DDOS攻击–>
 <add type=”UrlRewriter.DDosAttackModule, UrlRewriter” name=”DDosAttackModule”/>
 </httpModules>

using System;
using System.Web;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Timers;
 
namespace UrlRewriter
{
    /// <summary>
    /// 阻止攻击IP地址的回应
    /// </summary>
    public class DosAttackModule : IHttpModule
    {
        void IHttpModule.Dispose() { }
 
        void IHttpModule.Init(HttpApplication context)
        {
            context.BeginRequest += new EventHandler(context_BeginRequest);
        }
 
        private static Dictionary<string, short> _IpAdresses = new Dictionary<string, short>();
        private static Stack<string> _Banned = new Stack<string>();
        private static Timer _Timer = CreateTimer();
        private static Timer _BannedTimer = CreateBanningTimer();
 
        private const int BANNED_REQUESTS = 1; //规定时间内访问的最大次数
        private const int REDUCTION_INTERVAL = 1000; // 1 秒(检查访问次数的时间段)
        private const int RELEASE_INTERVAL = 5 * 60 * 1000; // 5 分钟(清除一个禁止IP的时间段)
 
        private void context_BeginRequest(object sender, EventArgs e)
        {
            string ip = HttpContext.Current.Request.UserHostAddress;
            if (_Banned.Contains(ip))
            {
                HttpContext.Current.Response.StatusCode = 403;
                HttpContext.Current.Response.End();
            }
 
            CheckIpAddress(ip);
        }
 
        /// <summary>
        /// 检查访问IP
        /// </summary>
        private static void CheckIpAddress(string ip)
        {
            if (!_IpAdresses.ContainsKey(ip)) //如果没有当前访问IP的记录就将访问次数设为1
            {
                _IpAdresses[ip] = 1;
            }
            else if (_IpAdresses[ip] == BANNED_REQUESTS) //如果当前IP访问次数等于规定时间段的最大访问次数就拉于“黑名单”
            {
                _Banned.Push(ip);
                _IpAdresses.Remove(ip);
            }
            else //正常访问就加次数 1
            {
                _IpAdresses[ip]++;
            }
        }
 
        #region Timers
 
        /// <summary>
        /// 创建计时器,从_IpAddress减去一个请求。
        /// </summary>
        private static Timer CreateTimer()
        {
            Timer timer = GetTimer(REDUCTION_INTERVAL);
            timer.Elapsed += new ElapsedEventHandler(TimerElapsed);
            return timer;
        }
 
        /// <summary>
        /// 创建定时器,消除一个禁止的IP地址
        /// </summary>
        /// <returns></returns>
        private static Timer CreateBanningTimer()
        {
            Timer timer = GetTimer(RELEASE_INTERVAL);
            timer.Elapsed += delegate { _Banned.Pop(); }; //消除一个禁止IP
            return timer;
        }
 
        /// <summary>
        /// 创建一个时间器,并启动它
        /// </summary>
        /// <param name="interval">以毫秒为单位的时间间隔</param>
        private static Timer GetTimer(int interval)
        {
            Timer timer = new Timer();
            timer.Interval = interval;
            timer.Start();
 
            return timer;
        }
 
        /// <summary>
        /// 减去从集合中的每个IP地址的请求
        /// </summary>
        private static void TimerElapsed(object sender, ElapsedEventArgs e)
        {
            foreach (string key in _IpAdresses.Keys)
            {
                _IpAdresses[key]--;
                if (_IpAdresses[key] == 0)
                    _IpAdresses.Remove(key);
            }
        }
 
        #endregion
 
    }
}
 
分享到:
评论

相关推荐

    ASP.NET入门经典ASP.NET入门经典ASP.NET入门经典ASP.NET入门经典ASP.NET入门经典ASP.NET入门经典

    ASP.NET入门经典ASP.NET入门经典ASP.NET入门经典ASP.NET入门经典ASP.NET入门经典ASP.NET入门经典ASP.NET入门经典ASP.NET入门经典ASP.NET入门经典ASP.NET入门经典ASP.NET入门经典ASP.NET入门经典ASP.NET入门经典ASP...

    Asp.Net 公众号代码 .net微信公众号代码 微信公众号代码

    Asp.Net 公众号代码 .net微信公众号代码 微信公众号代码 Asp.Net 公众号代码 .net微信公众号代码 微信公众号代码 Asp.Net 公众号代码 .net微信公众号代码 微信公众号代码 Asp.Net 公众号代码 .net微信公众号代码 ...

    asp.net源代码下载

    asp.net源代码下载asp.net源代码下载asp.net源代码下载asp.net源代码下载asp.net源代码下载asp.net源代码下载asp.net源代码下载asp.net源代码下载asp.net源代码下载

    C#本科毕业设计基于ASP.NET的人事管理系统源代码.zip

    C#本科毕业设计基于ASP.NET的人事管理系统源代码C#本科毕业设计基于ASP.NET的人事管理系统源代码C#本科毕业设计基于ASP.NET的人事管理系统源代码C#本科毕业设计基于ASP.NET的人事管理系统源代码。C#本科毕业设计基于...

    asp.net 人事管理系统 源代码

    asp.net 人事管理系统 源代码 asp.net 人事管理系统 源代码 asp.net 人事管理系统 源代码 asp.net 人事管理系统 源代码 asp.net 人事管理系统 源代码 asp.net 人事管理系统 源代码

    vb.net及asp.net代码手册

    vb.net及asp.net代码手册vb.net及asp.net代码手册vb.net及asp.net代码手册

    asp.net 论坛源代码

    asp.net 论坛源代码asp.net 论坛源代码asp.net 论坛源代码

    ASP.NET服务器控件与组件开发电子书及示例代码

    ASP.NET服务器控件与组件开发电子书及示例代码ASP.NET服务器控件与组件开发电子书及示例代码ASP.NET服务器控件与组件开发电子书及示例代码ASP.NET服务器控件与组件开发电子书及示例代码ASP.NET服务器控件与组件开发...

    Asp.Net通用Sql防注入源码

    Asp.Net通用Sql防注入源码 Asp.Net程序员预防程序被sql注入攻击的必备知识.

    ASP.NET学习积累的代码段

    ASP.NET学习积累的代码段.rarASP.NET学习积累的代码段.rarASP.NET学习积累的代码段.rarASP.NET学习积累的代码段.rarASP.NET学习积累的代码段.rarASP.NET学习积累的代码段.rarASP.NET学习积累的代码段.rarASP.NET学习...

    ASP.NET抽奖代码

    ASP.NET抽奖代码

    ASP.NET简洁论坛源代码免费下载

    ASP.NET简洁论坛源代码免费下载ASP.NET简洁论坛源代码免费下载ASP.NET简洁论坛源代码免费下载ASP.NET简洁论坛源代码免费下载ASP.NET简洁论坛源代码免费下载ASP.NET简洁论坛源代码免费下载ASP.NET简洁论坛源代码免费...

    ASP.NET MVC企业实战源代码Chapter12.rar

    通过本书的学习,读者可以全面掌握ASP.NET MVC的开发,并从代码中获取软件开发与架构设计的经验与灵感。本书具有很大的参考价值,既适合ASP.NET MVC开发初学者阅读,也适合有一定基础的ASP.NET MVC开发人员进行技术...

    asp.net代码.txt

    asp.net代码.txt asp.net代码.txt

    asp.net教程 ASP.NET 参考手册

    ASP.NET 参考手册 在 W3School,我们提供完整的 ASP.NET 参考手册,其中包括内建对象和组件,以及它们的属性和方法。 ASP.NET 实例 ASP.NET 实例 一系列的 ASP.NET 实例。 内容目录 ASP.NET 简介 本章解释 ASP.NET...

    ASP.NET MVC项目源代码设计资料

    ASP.NET MVC项目源代码设计资料

    ASP.NET写的轮播图代码页面

    ASP.NET写的轮播图代码页面,可以参考这个写法设计自己的asp.net页面或者网站,可以用于实验或者课程报告等

    asp.net防注入代码

    ASP.NET(c#)防SQL注入脚本程序

    ASP.net实战项目

    ASP.net实战项目ASP.net实战项目ASP.net实战项目ASP.net实战项目ASP.net实战项目ASP.net实战项目ASP.net实战项目ASP.net实战项目ASP.net实战项目ASP.net实战项目ASP.net实战项目ASP.net实战项目ASP.net实战项目ASP...

    经典ASP.NET项目源代码

    ASP.NET 经典ASP.NET项目源代码经典ASP.NET项目源代码经典ASP.NET项目源代码

Global site tag (gtag.js) - Google Analytics