// 检查 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); }
// 把一个 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); }