适用 C# 语言实现域名地址屏蔽实现

屏蔽域名地址,具体看域名定义规则,有一些设计实现是需要带通配符支持的,但大体都需要分为至少两个步骤:

1、直接命中

2、分段命中

一个域名地址格式大致为:[A-Za-z][0-9A-Za-z-].[A-Za-z0-9],如:jd.cn

即一个有效的域名地址必须要有一个 “.” 分段,多个 “.” 是子级分段域名了,假设我们需要屏蔽所有jd.cn 的域名,那么只需要录入 jd.cn 域名就可以。

现在有一个 www.jd.cn,首先它无法直接命中,因为它是根域名,但分段一级一级往上退就能命中到 jd.cn 的域名,另外域名地址是大小写模糊的,所以我们我们必须的提前统一字符串的 tolower or toupper。

实现这种东西是很有价值且非常重要的东西,至于是什么就不点明白了,连这些都不清楚,说明还是太年轻了,缺少社会的毒打,不信邪的小伙子已经参与改造很多年了。

#if NETCOREAPP
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
#endif
        public bool IsBanDomainAddress(string domain)
        {
            try
            {
                if (string.IsNullOrEmpty(domain))
                    return true;

                var alldomains = this.firewall.Domain;
                if (alldomains.Count < 1)
                    return false;
                else
                    domain = domain.ToLower();

                // Direct hit
                if (alldomains.Contains(domain))
                    return true;

                // Segment hit
                string[] lables = domain.Split('.');
                if (lables == null || lables.Length < 2)
                    return true;

                foreach (string i in lables)
                    if (string.IsNullOrEmpty(i))
                        return true;

                for (int i = 1, l = lables.Length - 1; i < l; i++)
                {
                    string next = null;
                    for (int j = i; j < lables.Length; j++)
                        if (next == null)
                            next += lables[j];
                        else
                            next += '.' + lables[j];
                    if (next != null && alldomains.Contains(next))
                        return true;
                }
            }
            catch (Exception) { }
            return false;
        }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值