aspx限制IP访问

首先是在global里加个Application_BeginRequest方法

void Application_BeginRequest(object sender, EventArgs e)
{
if (System.Web.HttpContext.Current.Request.Url.OriginalString.IndexOf("/admin/") != -1) //只有后台才进行检查
{
string ip = System.IO.File.ReadAllText(System.Web.HttpContext.Current.Server.MapPath("~/ip.txt")); //读取不要限制的IP地址
if (!isLimitIP(ip)) //存在ip地址段
{
System.Web.HttpContext.Current.Response.Redirect("~/error.aspx");
}
}
}


/// <summary>
/// 是否在限制IP段中
/// </summary>
/// <param name="strIP">ip段</param>
/// <returns>true 在,false 不在</returns>
public bool isLimitIP(string strIP)
{
if (strIP == "") //如果限定IP为空,那么肯定是不在此限制中的
{
return false;
}
string[] strsIP = null;
if (strIP.IndexOf('|') != -1) //如果当前IP段不是一个,则进行多个处理
{
strsIP = strIP.Split('|');
foreach (string str in strsIP)
{
if (isLimitIPNext(str)) //如果为ture 则在已经存在ip段中,直接返回true;
{
return true;
}
}
return false; //全部循环后,还没有退出,则肯定不存在,返回false
}
else
{
return isLimitIPNext(strIP);
}
}


/// <summary>
/// 是否在限制IP段中
/// </summary>
/// <param name="strIP">ip段</param>
/// <returns></returns>
private bool isLimitIPNext(string strIP)
{
if (strIP.IndexOf("-") != -1) //判断是否是IP段形式,如果是IP段形式,则自动过滤*形式
{
strIP = strIP.Replace("*", "1");
}
else
{
string beginIP = strIP.Replace("*", "1");
string endIP = strIP.Replace("*", "255");
strIP = beginIP + "-" + endIP;
}
string[] strsIP = strIP.Split('-'); //分割成单个IP
uint ipAddress = IPToInt(GetIP());
if (ipAddress >= IPToInt(strsIP[0]) && ipAddress <= IPToInt(strsIP[1])) //如果当前IP在IP段中,则返回true
{
return true;
}
else
{
return false;
}

}


/// <summary>
/// 获得当前页面客户端的IP
/// </summary>
/// <returns>当前页面客户端的IP</returns>
public static string GetIP()
{
string result = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
if (string.IsNullOrEmpty(result))
result = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];

if (string.IsNullOrEmpty(result))
result = HttpContext.Current.Request.UserHostAddress;

if (string.IsNullOrEmpty(result) || !IsIP(result))
return "127.0.0.1";

return result;
}


#region 判断是否为ip
/// <summary>
/// 是否为ip
/// </summary>
/// <param name="ip"></param>
/// <returns></returns>
public static bool IsIP(string ip)
{
return Regex.IsMatch(ip, @"^((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)$");
}
#endregion


#region IP地址转整数
/// <summary>
/// 地址转整数
/// </summary>
/// <param name="ipAddress"></param>
/// <returns></returns>
public static uint IPToInt(string ipAddress)
{
string disjunctiveStr = ".,: ";
char[] delimiter = disjunctiveStr.ToCharArray();
string[] startIP = null;
for (int i = 1; i <= 5; i++)
{
startIP = ipAddress.Split(delimiter, i);
}
string a1 = startIP[0].ToString();
string a2 = startIP[1].ToString();
string a3 = startIP[2].ToString();
string a4 = startIP[3].ToString();
uint U1 = uint.Parse(a1);
uint U2 = uint.Parse(a2);
uint U3 = uint.Parse(a3);
uint U4 = uint.Parse(a4);

uint U = U1 << 24;
U += U2 << 16;
U += U3 << 8;
U += U4;
return U;
}
#endregion


IP.txt 里内容

192.168.0.*|127.0.0.1|192.168.1.1-192.168.1.255


全部代码都在这里了 其实原理很简单 就是把IP转成整数再进行判断
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值