如何创建ip掩码并在.net上进行过滤
本文关键字:net 过滤 掩码 何创建 创建 ip | 更新日期: 2023-09-27 18:27:35
我定义了一些规则,其中包括这样的ip地址。
ip adress : 192.168.2.10 , block:true |
ip adress : 192.168.3.x , block:true |
ip adress : 10.x.x.x , block:false
x的意思是"全部"。我在page_load上获得了用户ip,我想将其与我的规则进行比较。如何比较用户ip和ip列表中的规则?
例如,如果ip开始"10"而不是阻止它……如果ip结束"10",也会这样阻止它。。。
(另外,很抱歉我的英语)
这里有一种方法可以实现您所描述的内容:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Text.RegularExpressions;
namespace WebApplication1
{
public partial class _Default : System.Web.UI.Page
{
private Dictionary<string, bool> rules = null;
public Dictionary<string, bool> Rules
{
get
{
if (rules == null)
{
// 1. use [0-9]{1,3} instead of x to represent any 1-3 digit numeric value
// 2. escape dots like such '.
rules = new Dictionary<string, bool>();
rules.Add(@"192'.168'.2'.10", true);
rules.Add(@"192'.168'.3'.[0-9]{1,3}", true);
rules.Add(@"10'.[0-9]{1,3}'.[0-9]{1,3}'.[0-9]{1,3}", false);
}
return rules;
}
}
protected bool IsAuthorizedByIP()
{
bool isAuthorized = false;
// get current IP
string currentIP = Request.ServerVariables["REMOTE_ADDR"];
currentIP = "10.168.2.10";
// set Authorization flag by evaluating rules
foreach (var rule in Rules)
{
if (Regex.IsMatch(currentIP, rule.Key))
isAuthorized = rule.Value;
}
return isAuthorized;
}
protected void Page_Load(object sender, EventArgs e)
{
if (IsAuthorizedByIP())
{
// do something that applies to authorized IPs
Response.Write("You are authorized!");
}
}
}
}
注意:上面的代码会将Authorization标志设置为列表中与其匹配的最后一条规则。如果多个规则匹配,则只保留最后一个匹配,而忽略以前的规则。在定义规则时要记住这一点,并考虑规则在字典中的顺序。
此外,如果您愿意,您可以将Rule正则表达式字符串移到配置文件中,并从中读取它们。我把那部分留给你。