生活随笔
收集整理的這篇文章主要介紹了
asp.net防类似DDOS攻击(CC攻击)代码
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
?
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地址的回應(yīng)/// </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; //規(guī)定時(shí)間內(nèi)訪問的最大次數(shù)private const int REDUCTION_INTERVAL
= 1000; // 1 秒(檢查訪問次數(shù)的時(shí)間段)private const int RELEASE_INTERVAL
= 5 * 60 * 1000; // 5 分鐘(清除一個(gè)禁止IP的時(shí)間段)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
)) //如果沒有當(dāng)前訪問IP的記錄就將訪問次數(shù)設(shè)為1{_IpAdresses
[ip
] = 1;}else if (_IpAdresses
[ip
] == BANNED_REQUESTS
) //如果當(dāng)前IP訪問次數(shù)等于規(guī)定時(shí)間段的最大訪問次數(shù)就拉于“黑名單”{_Banned.
Push(ip
);_IpAdresses.
Remove(ip
);}else //正常訪問就加次數(shù) 1{_IpAdresses
[ip
]++;}}#region Timers
/// <summary>/// 創(chuàng)建計(jì)時(shí)器,從_IpAddress減去一個(gè)請求。/// </summary>private static Timer CreateTimer
(){Timer timer
= GetTimer
(REDUCTION_INTERVAL
);timer.
Elapsed += new ElapsedEventHandler
(TimerElapsed
);return timer
;}/// <summary>/// 創(chuàng)建定時(shí)器,消除一個(gè)禁止的IP地址/// </summary>/// <returns></returns>private static Timer CreateBanningTimer
(){Timer timer
= GetTimer
(RELEASE_INTERVAL
);timer.
Elapsed += delegate
{ _Banned.
Pop(); }; //消除一個(gè)禁止IPreturn timer
;}/// <summary>/// 創(chuàng)建一個(gè)時(shí)間器,并啟動(dòng)它/// </summary>/// <param name="interval">以毫秒為單位的時(shí)間間隔</param>private static Timer GetTimer
(int interval
){Timer timer
= new Timer();timer.
Interval = interval
;timer.
Start();return timer
;}/// <summary>/// 減去從集合中的每個(gè)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
}
} http://blog.wuaiwei.com/2011/04/02/asp-neté2?±????ddos??????£??/#more-118
轉(zhuǎn)載于:https://www.cnblogs.com/jamin/archive/2011/04/11/2012254.html
總結(jié)
以上是生活随笔為你收集整理的asp.net防类似DDOS攻击(CC攻击)代码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。