From 41a4a3dfd1cec95dec4541fbd212e71a34e68266 Mon Sep 17 00:00:00 2001 From: thomasciesla Date: Tue, 9 Dec 2025 19:39:21 +0100 Subject: [PATCH] geoip_shop_manager.py aktualisiert --- geoip_shop_manager.py | 51 +++++++++++++++++++++++++++++++------------ 1 file changed, 37 insertions(+), 14 deletions(-) diff --git a/geoip_shop_manager.py b/geoip_shop_manager.py index 47c9a88..076d9a8 100644 --- a/geoip_shop_manager.py +++ b/geoip_shop_manager.py @@ -10,7 +10,7 @@ Supports three modes: - php-only: GeoIP blocking without CrowdSec - bot-only: Rate-limit bots, shop remains globally accessible -v3.4.3: Fixed rate-limit logic - bots under limit are allowed through +v3.4.4: Rate-Limit 0 wird akzeptiert (= sofortiger Bot-Ban) """ import os @@ -980,26 +980,34 @@ def select_mode(): def select_rate_limit(): print(f"\n🚦 Rate-Limit Konfiguration:") + print(f" (0 = Bots sofort bannen, kein Rate-Limiting)") rate_input = input(f" Requests pro Minute bevor Ban [{DEFAULT_RATE_LIMIT}]: ").strip() try: rate_limit = int(rate_input) if rate_input else DEFAULT_RATE_LIMIT - if rate_limit < 1: + if rate_limit < 0: + print(f" ⚠️ Ungültiger Wert, verwende Default: {DEFAULT_RATE_LIMIT}") rate_limit = DEFAULT_RATE_LIMIT except ValueError: + print(f" ⚠️ Ungültiger Wert, verwende Default: {DEFAULT_RATE_LIMIT}") rate_limit = DEFAULT_RATE_LIMIT ban_input = input(f" Ban-Dauer in Minuten [{DEFAULT_BAN_DURATION}]: ").strip() try: ban_minutes = int(ban_input) if ban_input else DEFAULT_BAN_DURATION if ban_minutes < 1: + print(f" ⚠️ Ungültiger Wert, verwende Default: {DEFAULT_BAN_DURATION}") ban_minutes = DEFAULT_BAN_DURATION except ValueError: + print(f" ⚠️ Ungültiger Wert, verwende Default: {DEFAULT_BAN_DURATION}") ban_minutes = DEFAULT_BAN_DURATION ban_seconds = ban_minutes * 60 - print(f"\n ✅ Rate-Limit: {rate_limit} req/min") + if rate_limit == 0: + print(f"\n 🚫 Rate-Limit: 0 (Bots werden SOFORT gebannt!)") + else: + print(f"\n ✅ Rate-Limit: {rate_limit} req/min") print(f" ✅ Ban-Dauer: {ban_minutes} Minuten") return rate_limit, ban_seconds @@ -1221,8 +1229,11 @@ def activate_blocking(shop, silent=False, mode="php+crowdsec", geo_region="dach" print(f" 🛡️ Fail-Open: Bei Cache-Fehlern wird Traffic durchgelassen") else: print(f" 🤖 {len(BOT_PATTERNS)} Bot-Patterns aktiv") - print(f" 🚦 Rate-Limit: {rate_limit} req/min, Ban: {ban_duration // 60} min") - print(f" ℹ️ Bots unter dem Limit werden durchgelassen") + if rate_limit == 0: + print(f" 🚫 Rate-Limit: 0 (Bots werden SOFORT gebannt!)") + else: + print(f" 🚦 Rate-Limit: {rate_limit} req/min, Ban: {ban_duration // 60} min") + print(f" ℹ️ Bots unter dem Limit werden durchgelassen") print(f" Gültig bis: {expiry.strftime('%Y-%m-%d %H:%M:%S CET')}") print("=" * 60) @@ -1326,8 +1337,11 @@ def activate_all_shops(): if not is_bot_mode: print(f" Region: {region_info['icon']} {region_info['name']}") else: - print(f" Rate-Limit: {rate_limit} req/min, Ban: {ban_duration // 60} min") - print(f" ℹ️ Bots unter dem Limit werden durchgelassen") + if rate_limit == 0: + print(f" 🚫 Rate-Limit: 0 (Bots werden SOFORT gebannt!)") + else: + print(f" Rate-Limit: {rate_limit} req/min, Ban: {ban_duration // 60} min") + print(f" ℹ️ Bots unter dem Limit werden durchgelassen") if input(f"\nFortfahren? (ja/nein): ").strip().lower() not in ['ja', 'j', 'yes', 'y']: print("\n❌ Abgebrochen") @@ -1433,8 +1447,11 @@ def activate_all_shops(): if not is_bot_mode: print(f" 🛡️ Fail-Open bei Cache-Fehlern aktiv") else: - print(f" 🚦 Rate-Limit: {rate_limit} req/min, Ban: {ban_duration // 60} min") - print(f" ℹ️ Bots unter dem Limit werden durchgelassen") + if rate_limit == 0: + print(f" 🚫 Rate-Limit: 0 (Bots werden SOFORT gebannt!)") + else: + print(f" 🚦 Rate-Limit: {rate_limit} req/min, Ban: {ban_duration // 60} min") + print(f" ℹ️ Bots unter dem Limit werden durchgelassen") print(f"{'=' * 60}") @@ -1483,8 +1500,11 @@ def activate_direct_shops_only(): if not is_bot_mode: print(f" Region: {region_info['icon']} {region_info['name']}") else: - print(f" Rate-Limit: {rate_limit} req/min, Ban: {ban_duration // 60} min") - print(f" ℹ️ Bots unter dem Limit werden durchgelassen") + if rate_limit == 0: + print(f" 🚫 Rate-Limit: 0 (Bots werden SOFORT gebannt!)") + else: + print(f" Rate-Limit: {rate_limit} req/min, Ban: {ban_duration // 60} min") + print(f" ℹ️ Bots unter dem Limit werden durchgelassen") if input(f"\nFortfahren? (ja/nein): ").strip().lower() not in ['ja', 'j', 'yes', 'y']: print("\n❌ Abgebrochen") @@ -1591,8 +1611,11 @@ def activate_direct_shops_only(): if not is_bot_mode: print(f" 🛡️ Fail-Open bei Cache-Fehlern aktiv") else: - print(f" 🚦 Rate-Limit: {rate_limit} req/min, Ban: {ban_duration // 60} min") - print(f" ℹ️ Bots unter dem Limit werden durchgelassen") + if rate_limit == 0: + print(f" 🚫 Rate-Limit: 0 (Bots werden SOFORT gebannt!)") + else: + print(f" 🚦 Rate-Limit: {rate_limit} req/min, Ban: {ban_duration // 60} min") + print(f" ℹ️ Bots unter dem Limit werden durchgelassen") print(f"{'=' * 60}") @@ -1962,7 +1985,7 @@ def show_all_logs(): def main(): print("\n" + "=" * 60) - print(" GeoIP Shop Blocker Manager v3.4.3") + print(" GeoIP Shop Blocker Manager v3.4.4") print(" 🇩🇪🇦🇹🇨🇭 DACH | 🇪🇺 Eurozone+GB | 🤖 Bot-Rate-Limiting") print(" 🛡️ Mit Cache-Validierung und Fail-Open") print(" 🚦 Bots unter Rate-Limit werden durchgelassen")