From ae0bf810cc05fdd140193920cf8c2de459c45ea8 Mon Sep 17 00:00:00 2001 From: Sarah Hoffmann Date: Fri, 11 May 2018 21:50:22 +0200 Subject: [PATCH] take redirects into account for request limits --- utils/cron_ipanalyse.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/utils/cron_ipanalyse.py b/utils/cron_ipanalyse.py index 1ca2267f..4c66b001 100755 --- a/utils/cron_ipanalyse.py +++ b/utils/cron_ipanalyse.py @@ -223,6 +223,7 @@ class BlockList: class IPstats: def __init__(self): + self.redirected = 0 self.short_total = 0 self.short_api = 0 self.long_total = 0 @@ -231,6 +232,8 @@ class IPstats: self.bad_ua = False def add_long(self, logentry): + if logentry.retcode == 301: + return self.long_total += 1 if logentry.request is not None: self.long_api += 1 @@ -240,6 +243,9 @@ class IPstats: def add_short(self, logentry): self.short_total += 1 + if logentry.retcode == 301: + self.redirected += 1 + return if logentry.request is not None: self.short_api += 1 self.add_long(logentry) @@ -255,7 +261,9 @@ class IPstats: # deblock only if the IP has been really quiet # (properly catches the ones that simply ignore the HTTP error) return None if self.long_total < 20 else 'block' - if self.long_api > BLOCK_UPPER or self.short_api > BLOCK_UPPER / 3: + if self.long_api > BLOCK_UPPER \ + or self.short_api > BLOCK_UPPER / 3 \ + or self.short_total == self.redirected: # client totally overdoing it return 'block' if was_bulked: -- 2.39.5