Esempio n. 1
0
        // 检查 IP。
        // exception:
        //      可能会抛出异常
        // return:
        //      null    许可 IP 被使用
        //      其他   禁止 IP 使用。字符串内容为禁止理由
        public string CheckIp(string ip)
        {
            // exception:
            //      可能会抛出异常
            IpEntry entry = GetIpEntry(ip);

            if (entry.IsInBlackList() == true)
            {
                return("IP [" + ip + "] 在黑名单之中");
            }

            // return:
            //      false   总量超过 max
            //      true    总量没有超过 max
            if (entry.CheckTotal(_maxTotalConnectRequest, _period) == false)
            {
                // TODO: 何时从黑名单中自动清除?
                entry.SetInBlackList();
                return("IP [" + ip + "] 短时间 (" + _period.TotalSeconds.ToString() + "秒) 内连接请求数超过极限 (" + _maxTotalConnectRequest + "),已被加入黑名单");
            }

            long value = entry.IncOnline();

            if (MaxClientsPerIp != -1 && value > MaxClientsPerIp)
            {
                entry.DecOnline();
                return("IP 地址为 '" + ip + "' 的前端数量超过配额 " + MaxClientsPerIp);
            }

            return(null);
        }
Esempio n. 2
0
        // 把一个 IP 加入黑名单
        // exception:
        //      可能会抛出异常
        // return:
        //      false   调用前已经在黑名单之中
        //      true    成功
        public bool SetInBlackList(string ip, TimeSpan lockLength)
        {
            // exception:
            //      可能会抛出异常
            IpEntry entry = GetIpEntry(ip);

            if (entry.IsInBlackList() == true)
            {
                return(false);   // 已经在黑名单之中
            }
            entry.SetInBlackList(lockLength);
            return(true);
        }