public DosAttackEntry Clone() { var result = new DosAttackEntry { IsBanned = this.IsBanned, IsRemoveCandidate = this.IsRemoveCandidate, RequestCount = this.RequestCount, BanDate = this.BanDate, LastRequestDate = this.LastRequestDate, LastMinute = this.LastMinute, LastSecond = this.LastSecond }; return(result); }
private DosAttackEntry UpdateEntry(string ip, DosAttackEntry oldentry) { var dt = DateTime.Now; oldentry.LastRequestDate = dt; if (oldentry.IsBanned) { var banSpan = dt - oldentry.BanDate; if (banSpan.TotalSeconds >= RELEASE_INTERVAL) { oldentry.IsBanned = false; oldentry.RequestCount = 1; } } else { var min = dt.Minute; var sec = dt.Second; if (oldentry.LastMinute == min && oldentry.LastSecond == sec) { oldentry.RequestCount++; } else { oldentry.RequestCount = 1; } if (oldentry.RequestCount >= REQUEST_THRESHOLD) { oldentry.BanDate = dt; oldentry.IsBanned = true; } } return(oldentry); }