• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >ASP.NET > asp.net实现拒绝频繁的IP访问的方法

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

作者:且行且思 字体:[增加 减小] 来源:互联网 时间:2017-05-11

且行且思通过本文主要向大家介绍了asp.net,asp net培训,asp和asp.net的区别,零基础学asp.net,c#和asp.net的区别等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

本文实例讲述了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()
    {
    }
  }
}

</div>

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;//不存在
    }
  }
}

</div>

在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>

</div>

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

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

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Asp.net SignalR 应用并实现群聊功能 开源代码
  • asp.net动态更新
  • asp.net利用母版制作页脚效果
  • Asp.Net服务器发送HTTP标头后无法设置内容类型的问题解决
  • 使用asp.net mvc,boostrap及knockout.js开发微信自定义菜单编辑工具(推荐)
  • 详解ASP.NET MVC 常用扩展点:过滤器、模型绑定
  • ASP.NET Core发送邮件的方法
  • 在ASP.NET Core 中发送邮件的实现方法(必看篇)
  • ASP.NET MVC从视图传参到控制器的几种形式
  • Asp.net core WebApi 使用Swagger生成帮助页实例

相关文章

  • 2017-05-11asp.net Repeater 自增
  • 2017-05-11asp.net+ajax+sqlserver自动补全功能实现解析
  • 2017-05-11ASP.NET笔记之 控件与母板的区别分析
  • 2017-05-11NET索引器使用方法实例代码
  • 2018-08-20.Net MVC实现长轮询
  • 2017-05-11asp.net页面master页面与ascx用户控件传值的问题
  • 2017-05-11asp.net 产生唯一随机码的方法分析
  • 2017-05-11GridView导出Excel实现原理与代码
  • 2017-05-11在Web用户控件中引用样式表中样式的方法
  • 2017-05-11asp.net 获取Datalist中Checkbox的值的小结

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • asp.net用url重写URLReWriter实现任意二级域名 新
    • asp.net System.Net.Mail 发送邮件
    • ASP.NET Core 2.0 支付宝扫码支付的实现代码
    • asp.net gridview强制换行
    • asp.net中通过ALinq让Mysql操作变得如此简单
    • asp.net实现识别客户端浏览器或操作系统
    • ASP.NET与ASP互通COOKIES的一点经验
    • c# 在WebBrowser中用SendMessage模拟鼠标点击
    • asp.net 防止SQL注入攻击
    • asp.net Linq TO Sql 分页方法

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有