操作客户端IP类(C#)

来源:互联网 发布:linux怎么做脚本 编辑:程序博客网 时间:2024/06/07 17:15

using System;
using System.Text;
using System.Data;

namespace Baolee.GeneralMethod
{
 /// <summary>
 /// DenyIP 的摘要说明。
 /// </summary>
 public class DenyIP
 {
  /// <summary>
  /// 构造函数
  /// </summary>
  public DenyIP()
  {
   //
   // TODO: 在此处添加构造函数逻辑
   //
  }
  /// <summary>
  /// times add 1
  /// </summary>
  /// <param name="dt"></param>
  /// <param name="ip"></param>
  public void Add(DataTable dt, string ip)
  {
   foreach (DataRow row in dt.Rows)
   {
    if (row[0].ToString() == ip)
    {
     row[1] = DateTime.Now;
     row[2] = Convert.ToInt16(row[2]) + 1;
     return;
    }
   }
   DataRow row2 = dt.NewRow();
   row2[0] = ip;
   row2[1] = DateTime.Now;
   row2[2] = 1;
   dt.Rows.Add(row2);
  }
  /// <summary>
  ///
  /// </summary>
  /// <param name="dt"></param>
  /// <param name="times"></param>
  private void Clear(DataTable dt, int times)
  {
   int count = dt.Rows.Count;
   int num2 = 0;
   for (int i = 0; i < count; i++)
   {
    if ((Convert.ToInt16(dt.Rows[num2][2]) > times) && (DateTime.Now.CompareTo(dt.Rows[num2][1]) > 0))
    {
     dt.Rows[num2].Delete();
    }
    else if (DateTime.Now.AddMinutes(-30).CompareTo(dt.Rows[num2][1]) > 0)
    {
     dt.Rows[num2].Delete();
    }
    else
    {
     num2++;
    }
   }
  }
  /// <summary>
  /// 从DataTable中移除指定IP
  /// </summary>
  /// <param name="dt"></param>
  /// <param name="ip"></param>
  public void Clear(DataTable dt, string ip)
  {
   foreach (DataRow row in dt.Rows)
   {
    if (row[0].ToString() == ip)
    {
     row.Delete();
     break;
    }
   }
  }
  /// <summary>
  /// 检查用户IP使用情况,记录登入失败次数,如果超出允许次数,则封IP10分钟
  /// </summary>
  /// <param name="dt">DataTable</param>
  /// <param name="ip">用户IP</param>
  /// <param name="times">可允许次数</param>
  /// <returns>该IP是否允许使用</returns>
  public bool DetectIP(DataTable dt, string ip, int times)
  {
   this.Clear(dt, times);
   foreach (DataRow row in dt.Rows)
   {
    if (row[0].ToString() == ip)
    {
     int num = Convert.ToInt16(row[2]);
     if (times < (num + 1))
     {
      row[1] = DateTime.Now.AddMinutes(10);
      row[2] = num + 1;
      return false;
     }
    }
   }
   return true;
  }

  /// <summary>
  /// 创建DataTable for IPList
  /// </summary>
  /// <returns></returns>
  public DataTable LockIPList()
  {
   DataTable table = new DataTable();
   DataColumn column = new DataColumn("IP", Type.GetType("System.String"));
   table.Columns.Add(column);
   column = new DataColumn("LockTime", Type.GetType("System.DateTime"));
   table.Columns.Add(column);
   column = new DataColumn("Times", Type.GetType("System.Int16"));
   table.Columns.Add(column);
   return table;
  }
 }
}