如何创建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",也会这样阻止它。。。

(另外,很抱歉我的英语)

如何创建ip掩码并在.net上进行过滤

这里有一种方法可以实现您所描述的内容:

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正则表达式字符串移到配置文件中,并从中读取它们。我把那部分留给你。