geoip_shop_manager.py aktualisiert
This commit is contained in:
@@ -10,7 +10,7 @@ Supports three modes:
|
|||||||
- php-only: GeoIP blocking without CrowdSec
|
- php-only: GeoIP blocking without CrowdSec
|
||||||
- bot-only: Rate-limit bots, shop remains globally accessible
|
- 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
|
import os
|
||||||
@@ -980,26 +980,34 @@ def select_mode():
|
|||||||
|
|
||||||
def select_rate_limit():
|
def select_rate_limit():
|
||||||
print(f"\n🚦 Rate-Limit Konfiguration:")
|
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()
|
rate_input = input(f" Requests pro Minute bevor Ban [{DEFAULT_RATE_LIMIT}]: ").strip()
|
||||||
try:
|
try:
|
||||||
rate_limit = int(rate_input) if rate_input else DEFAULT_RATE_LIMIT
|
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
|
rate_limit = DEFAULT_RATE_LIMIT
|
||||||
except ValueError:
|
except ValueError:
|
||||||
|
print(f" ⚠️ Ungültiger Wert, verwende Default: {DEFAULT_RATE_LIMIT}")
|
||||||
rate_limit = DEFAULT_RATE_LIMIT
|
rate_limit = DEFAULT_RATE_LIMIT
|
||||||
|
|
||||||
ban_input = input(f" Ban-Dauer in Minuten [{DEFAULT_BAN_DURATION}]: ").strip()
|
ban_input = input(f" Ban-Dauer in Minuten [{DEFAULT_BAN_DURATION}]: ").strip()
|
||||||
try:
|
try:
|
||||||
ban_minutes = int(ban_input) if ban_input else DEFAULT_BAN_DURATION
|
ban_minutes = int(ban_input) if ban_input else DEFAULT_BAN_DURATION
|
||||||
if ban_minutes < 1:
|
if ban_minutes < 1:
|
||||||
|
print(f" ⚠️ Ungültiger Wert, verwende Default: {DEFAULT_BAN_DURATION}")
|
||||||
ban_minutes = DEFAULT_BAN_DURATION
|
ban_minutes = DEFAULT_BAN_DURATION
|
||||||
except ValueError:
|
except ValueError:
|
||||||
|
print(f" ⚠️ Ungültiger Wert, verwende Default: {DEFAULT_BAN_DURATION}")
|
||||||
ban_minutes = DEFAULT_BAN_DURATION
|
ban_minutes = DEFAULT_BAN_DURATION
|
||||||
|
|
||||||
ban_seconds = ban_minutes * 60
|
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")
|
print(f" ✅ Ban-Dauer: {ban_minutes} Minuten")
|
||||||
|
|
||||||
return rate_limit, ban_seconds
|
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")
|
print(f" 🛡️ Fail-Open: Bei Cache-Fehlern wird Traffic durchgelassen")
|
||||||
else:
|
else:
|
||||||
print(f" 🤖 {len(BOT_PATTERNS)} Bot-Patterns aktiv")
|
print(f" 🤖 {len(BOT_PATTERNS)} Bot-Patterns aktiv")
|
||||||
print(f" 🚦 Rate-Limit: {rate_limit} req/min, Ban: {ban_duration // 60} min")
|
if rate_limit == 0:
|
||||||
print(f" ℹ️ Bots unter dem Limit werden durchgelassen")
|
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(f" Gültig bis: {expiry.strftime('%Y-%m-%d %H:%M:%S CET')}")
|
||||||
print("=" * 60)
|
print("=" * 60)
|
||||||
|
|
||||||
@@ -1326,8 +1337,11 @@ def activate_all_shops():
|
|||||||
if not is_bot_mode:
|
if not is_bot_mode:
|
||||||
print(f" Region: {region_info['icon']} {region_info['name']}")
|
print(f" Region: {region_info['icon']} {region_info['name']}")
|
||||||
else:
|
else:
|
||||||
print(f" Rate-Limit: {rate_limit} req/min, Ban: {ban_duration // 60} min")
|
if rate_limit == 0:
|
||||||
print(f" ℹ️ Bots unter dem Limit werden durchgelassen")
|
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']:
|
if input(f"\nFortfahren? (ja/nein): ").strip().lower() not in ['ja', 'j', 'yes', 'y']:
|
||||||
print("\n❌ Abgebrochen")
|
print("\n❌ Abgebrochen")
|
||||||
@@ -1433,8 +1447,11 @@ def activate_all_shops():
|
|||||||
if not is_bot_mode:
|
if not is_bot_mode:
|
||||||
print(f" 🛡️ Fail-Open bei Cache-Fehlern aktiv")
|
print(f" 🛡️ Fail-Open bei Cache-Fehlern aktiv")
|
||||||
else:
|
else:
|
||||||
print(f" 🚦 Rate-Limit: {rate_limit} req/min, Ban: {ban_duration // 60} min")
|
if rate_limit == 0:
|
||||||
print(f" ℹ️ Bots unter dem Limit werden durchgelassen")
|
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}")
|
print(f"{'=' * 60}")
|
||||||
|
|
||||||
|
|
||||||
@@ -1483,8 +1500,11 @@ def activate_direct_shops_only():
|
|||||||
if not is_bot_mode:
|
if not is_bot_mode:
|
||||||
print(f" Region: {region_info['icon']} {region_info['name']}")
|
print(f" Region: {region_info['icon']} {region_info['name']}")
|
||||||
else:
|
else:
|
||||||
print(f" Rate-Limit: {rate_limit} req/min, Ban: {ban_duration // 60} min")
|
if rate_limit == 0:
|
||||||
print(f" ℹ️ Bots unter dem Limit werden durchgelassen")
|
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']:
|
if input(f"\nFortfahren? (ja/nein): ").strip().lower() not in ['ja', 'j', 'yes', 'y']:
|
||||||
print("\n❌ Abgebrochen")
|
print("\n❌ Abgebrochen")
|
||||||
@@ -1591,8 +1611,11 @@ def activate_direct_shops_only():
|
|||||||
if not is_bot_mode:
|
if not is_bot_mode:
|
||||||
print(f" 🛡️ Fail-Open bei Cache-Fehlern aktiv")
|
print(f" 🛡️ Fail-Open bei Cache-Fehlern aktiv")
|
||||||
else:
|
else:
|
||||||
print(f" 🚦 Rate-Limit: {rate_limit} req/min, Ban: {ban_duration // 60} min")
|
if rate_limit == 0:
|
||||||
print(f" ℹ️ Bots unter dem Limit werden durchgelassen")
|
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}")
|
print(f"{'=' * 60}")
|
||||||
|
|
||||||
|
|
||||||
@@ -1962,7 +1985,7 @@ def show_all_logs():
|
|||||||
|
|
||||||
def main():
|
def main():
|
||||||
print("\n" + "=" * 60)
|
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(" 🇩🇪🇦🇹🇨🇭 DACH | 🇪🇺 Eurozone+GB | 🤖 Bot-Rate-Limiting")
|
||||||
print(" 🛡️ Mit Cache-Validierung und Fail-Open")
|
print(" 🛡️ Mit Cache-Validierung und Fail-Open")
|
||||||
print(" 🚦 Bots unter Rate-Limit werden durchgelassen")
|
print(" 🚦 Bots unter Rate-Limit werden durchgelassen")
|
||||||
|
|||||||
Reference in New Issue
Block a user