asp.net实现拒绝频繁的IP访问的方法

本文实例讲述了asp.net实现拒绝频繁的IP访问的方法。分享给大家供大家参考,具体如下:

首先我们要实现 IHttpModule接口

using System;

using System.Collections.Generic;

using System.Text;

using System.Web;

using System.Web.UI;

using System.Web.SessionState;

using System.Configuration;

namespace MyHttp

{

public class UrlReWrite : IHttpModule

{

/// <summary>

/// 单个IP最大连接限制数量

/// </summary>

private int rowCount = Convert.ToInt32(ConfigurationSettings.AppSettings["HttpRowCount"]);

/// <summary>

/// 指定区域时间范围 单位分

/// </summary>

private int httpTime = Convert.ToInt32(ConfigurationSettings.AppSettings["HttpTime"]);

public void Init(HttpApplication application)

{

application.BeginRequest += (new

EventHandler(this.Application_BeginRequest));

application.EndRequest += (new

EventHandler(this.Application_EndRequest));

}

private void Application_BeginRequest(Object source, EventArgs e)

{

HttpApplication Application = (HttpApplication)source;

HttpContext ctx = Application.Context;

//IP地址

string isIp = ctx.Request.UserHostAddress;

if (ctx.Application["time"] == null)

{

ctx.Application["time"] = DateTime.Now;

}

else

{

DateTime isTime = (DateTime)ctx.Application["time"];

int timeTract = Convert.ToInt32(DateTime.Now.Subtract(isTime).Minutes.ToString());

if (timeTract > (httpTime - 1))

{

ctx.Application["time"] = null;

ctx.Application["myip"] = null;

}

}

if (ctx.Application["myip"] != null && ctx.Application["myip"] is CartIp)

{

CartIp cartIp = (CartIp)ctx.Application["myip"];

cartIp.Insert(isIp);

ctx.Application["myip"] = cartIp;

if (cartIp.GetCount(isIp) > rowCount)

{

ctx.Response.Clear();

ctx.Response.Close();

}

}

else

{

CartIp cartIp = new CartIp();

cartIp.Insert(isIp);

HttpContext.Current.Application["myip"] = cartIp;

}

}

private void Application_EndRequest(Object source, EventArgs e)

{

}

public void Dispose()

{

}

}

}

ListIp 类

using System;

using System.Collections.Generic;

using System.Text;

namespace MyHttp

{

[Serializable]

public class ListIp

{

private string ip;

private int count;

/// <summary>

/// IP地址

/// </summary>

public string IP

{

get { return ip; }

set { ip = value; }

}

/// <summary>

/// 累加数量

/// </summary>

public int Count

{

get { return count; }

set { count = value; }

}

}

[Serializable]

public class CartIp

{

public CartIp()

{

if (_listIp == null)

{

_listIp = new List<ListIp>();

}

}

private List<ListIp> _listIp;

public List<ListIp> _ListIp

{

get { return _listIp; }

set { _listIp = value; }

}

/// <summary>

/// 添加IP

/// </summary>

public void Insert(string ip)

{

int indexof = ItemLastInfo(ip);

if (indexof == -1)

{

//不存在

ListIp item = new ListIp();

item.IP = ip;

_listIp.Add(item);

}

else

{

_listIp[indexof].Count += 1;

}

}

//判断IP是否存在

public int ItemLastInfo(string ip)

{

int index = 0;

foreach (ListIp item in _ListIp)

{

if (item.IP == ip)

{

return index;//存在

}

index += 1;

}

return -1;//不存在

}

/// <summary>

/// 获得IP的数量

/// </summary>

/// <param name="ip"></param>

/// <returns></returns>

public int GetCount(string ip)

{

foreach (ListIp item in _ListIp)

{

if (item.IP == ip)

{

return item.Count;//存在

}

}

return -1;//不存在

}

}

}

在web.config 配置访问规则

<appSettings>

<add key="HttpRowCount" value="100"/>

<add key="HttpTime" value="10"/>

</appSettings>

<system.web>

<httpModules>

<add name="UrlReWrite" type="MyHttp.UrlReWrite"/>

</httpModules>

</system.web>

更多关于asp.net相关内容感兴趣的读者可查看本站专题:《asp.net文件操作技巧汇总》、《asp.net ajax技巧总结专题》及《asp.net缓存操作技巧总结》。

希望本文所述对大家asp.net程序设计有所帮助。

以上是 asp.net实现拒绝频繁的IP访问的方法 的全部内容, 来源链接: utcz.com/z/314783.html

回到顶部