public XmlRpcBasicDOSProtector(XmlRpcMethod normalMethod, XmlRpcMethod throttledMethod,BasicDosProtectorOptions options) { _normalMethod = normalMethod; _throttledMethod = throttledMethod; _options = options; _dosProtector = new BasicDOSProtector(_options); }
public BasicDOSProtector(BasicDosProtectorOptions options) { _generalRequestTimes = new CircularBuffer <int>(options.MaxRequestsInTimeframe + 1, true); _generalRequestTimes.Put(0); _options = options; _deeperInspection = new Dictionary <string, CircularBuffer <int> >(); _tempBlocked = new Dictionary <string, int>(); _sessions = new Dictionary <string, int>(); _forgetTimer = new System.Timers.Timer(); _forgetTimer.Elapsed += delegate { _forgetTimer.Enabled = false; List <string> removes = new List <string>(); _blockLockSlim.EnterReadLock(); foreach (string str in _tempBlocked.Keys) { if ( Util.EnvironmentTickCountSubtract(Util.EnvironmentTickCount(), _tempBlocked[str]) > 0) { removes.Add(str); } } _blockLockSlim.ExitReadLock(); lock (_deeperInspection) { _blockLockSlim.EnterWriteLock(); for (int i = 0; i < removes.Count; i++) { _tempBlocked.Remove(removes[i]); _deeperInspection.Remove(removes[i]); _sessions.Remove(removes[i]); } _blockLockSlim.ExitWriteLock(); } foreach (string str in removes) { m_log.InfoFormat("[{0}] client: {1} is no longer blocked.", _options.ReportingName, str); } _blockLockSlim.EnterReadLock(); if (_tempBlocked.Count > 0) { _forgetTimer.Enabled = true; } _blockLockSlim.ExitReadLock(); }; _forgetTimer.Interval = _options.ForgetTimeSpan.TotalMilliseconds; }
public BasicDOSProtector(BasicDosProtectorOptions options) { _generalRequestTimes = new CircularBuffer<int>(options.MaxRequestsInTimeframe + 1, true); _generalRequestTimes.Put(0); _options = options; _deeperInspection = new Dictionary<string, CircularBuffer<int>>(); _tempBlocked = new Dictionary<string, int>(); _sessions = new Dictionary<string, int>(); _forgetTimer = new System.Timers.Timer(); _forgetTimer.Elapsed += delegate { _forgetTimer.Enabled = false; List<string> removes = new List<string>(); _blockLockSlim.EnterReadLock(); foreach (string str in _tempBlocked.Keys) { if ( Util.EnvironmentTickCountSubtract(Util.EnvironmentTickCount(), _tempBlocked[str]) > 0) removes.Add(str); } _blockLockSlim.ExitReadLock(); lock (_deeperInspection) { _blockLockSlim.EnterWriteLock(); for (int i = 0; i < removes.Count; i++) { _tempBlocked.Remove(removes[i]); _deeperInspection.Remove(removes[i]); _sessions.Remove(removes[i]); } _blockLockSlim.ExitWriteLock(); } foreach (string str in removes) { m_log.InfoFormat("[{0}] client: {1} is no longer blocked.", _options.ReportingName, str); } _blockLockSlim.EnterReadLock(); if (_tempBlocked.Count > 0) _forgetTimer.Enabled = true; _blockLockSlim.ExitReadLock(); }; _forgetTimer.Interval = _options.ForgetTimeSpan.TotalMilliseconds; }
protected BaseStreamHandlerBasicDOSProtector(string httpMethod, string path, string name, string description, BasicDosProtectorOptions options) : base(httpMethod, path, name, description) { _options = options; _dosProtector = new BasicDOSProtector(_options); }
protected BaseStreamHandlerBasicDOSProtector(string httpMethod, string path, BasicDosProtectorOptions options) : this(httpMethod, path, null, null, options) {}
private string ReadLocalServiceFromConfig(IConfigSource config) { IConfig serverConfig = config.Configs["LoginService"]; if (serverConfig == null) throw new Exception(String.Format("No section LoginService in config file")); string loginService = serverConfig.GetString("LocalServiceModule", String.Empty); if (loginService == string.Empty) throw new Exception(String.Format("No LocalServiceModule for LoginService in config file")); m_Proxy = serverConfig.GetBoolean("HasProxy", false); m_DosProtectionOptions = new BasicDosProtectorOptions(); // Dos Protection Options m_DosProtectionOptions.AllowXForwardedFor = serverConfig.GetBoolean("DOSAllowXForwardedForHeader", false); m_DosProtectionOptions.RequestTimeSpan = TimeSpan.FromMilliseconds(serverConfig.GetInt("DOSRequestTimeFrameMS", 10000)); m_DosProtectionOptions.MaxRequestsInTimeframe = serverConfig.GetInt("DOSMaxRequestsInTimeFrame", 5); m_DosProtectionOptions.ForgetTimeSpan = TimeSpan.FromMilliseconds(serverConfig.GetInt("DOSForgiveClientAfterMS", 120000)); m_DosProtectionOptions.ReportingName = "LOGINDOSPROTECTION"; return loginService; }