From afcc5ffe886739939befa10d47f2c0d944db860e Mon Sep 17 00:00:00 2001 From: it00147 Date: Wed, 3 Dec 2025 17:20:30 +0000 Subject: [PATCH] v2.1 - Added Ninja Mode --- README.md | 6 ++++++ app.py | 41 ++++++++++++++++++++--------------------- 2 files changed, 26 insertions(+), 21 deletions(-) diff --git a/README.md b/README.md index d37c36f..9e63ba9 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,9 @@ # myip – IP & RIPE Lookup (extended) UI moderna + IP reale + RIPE esteso (ASN, Provider, Prefix, Routing Status, Reverse DNS, GeoLocation, Abuse Contact). +v2.1 - Aggiunta funzionalità Ninja +https://fqdn/ +→ comportamento normale, usa l’IP del client. + +https://fqdn/?checkip=8.8.8.8 +→ la pagina mostrerà i dati RIPE per 8.8.8.8, senza cambiare la UI. diff --git a/app.py b/app.py index 886e7b6..9cb497b 100644 --- a/app.py +++ b/app.py @@ -172,7 +172,25 @@ def get_client_ip(): # 3) Fallback: remote_addr così com'è return request.remote_addr or "Sconosciuto" +def get_effective_ip(): + """ + Restituisce (ip, overridden) + - ip: indirizzo IP da usare per la lookup + - overridden: True se l'IP è stato forzato via ?checkip= + """ + override = request.args.get("checkip") + if override: + override = override.strip() + try: + # valida che sia un IP v4/v6 + ipaddress.ip_address(override) + return override, True + except ValueError: + # se non è valido, ignora e usa il flusso normale + pass + # default: uso l'IP reale del client + return get_client_ip(), False def fetch_ripe_info(ip: str): """Recupera informazioni RIPEstat estese per l'IP, compatibili col template.""" @@ -354,34 +372,15 @@ def fetch_ripe_info(ip: str): @app.route("/") def index(): - ip = get_client_ip() + ip, overridden = get_effective_ip() ripe_info = fetch_ripe_info(ip) if ip != "Sconosciuto" else None return render_template_string( HTML_TEMPLATE, ip=ip, ripe=ripe_info, show_logo=True, + override=overridden, ) -@app.route("/debug") -def debug(): - from flask import jsonify - return jsonify( - remote_addr=request.remote_addr, - x_forwarded_for=request.headers.get("X-Forwarded-For"), - x_real_ip=request.headers.get("X-Real-IP"), - all_headers=dict(request.headers), - ) - -@app.route("/ripe-debug") -def ripe_debug(): - from flask import jsonify - ip = get_client_ip() - ripe_info = fetch_ripe_info(ip) if ip != "Sconosciuto" else None - return jsonify({ - "ip": ip, - "ripe": ripe_info, - }) - if __name__ == "__main__": app.run(host="0.0.0.0", port=8000)