From f6dc1e2996c8aa19bcbe666a345bf4e4e9f8eea0 Mon Sep 17 00:00:00 2001 From: Snoww <40239844+SnowSquire@users.noreply.github.com> Date: Wed, 15 Apr 2026 16:14:35 -0400 Subject: [PATCH] better ipv6 ratelimiting logic (#1439) aligns ipv6 normalizatoin logic with the typical residental allocation of /56 instead of /64. --- copyparty/util.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/copyparty/util.py b/copyparty/util.py index 9343f01d..b0004e5a 100644 --- a/copyparty/util.py +++ b/copyparty/util.py @@ -1501,8 +1501,7 @@ class Garda(object): return 0, ip if ":" in ip: - # assume /64 clients; drop 4 groups - ip = IPv6Address(ip).exploded[:-20] + ip = ipnorm(ip) if prev and self.uniq: if self.prev.get(ip) == prev: @@ -2445,8 +2444,8 @@ def odfusion( def ipnorm(ip: str) -> str: if ":" in ip: - # assume /64 clients; drop 4 groups - return IPv6Address(ip).exploded[:-20] + # assume /56 clients; drop final 72 bits + return str(IPv6Network(ip + "/56", strict=False).network_address) return ip