from flask import Flask, request, render_template_string import requests from werkzeug.middleware.proxy_fix import ProxyFix app = Flask(__name__) app.wsgi_app = ProxyFix(app.wsgi_app, x_for=1, x_proto=1) HTML_TEMPLATE = """ myip – IP & RIPE Lookup
{% if show_logo %} {% endif %}
IP & RIPE Lookup

Il tuo IP pubblico è:

{{ ip }}
{% if ripe %}
Informazioni RIPE
{% if ripe.holder %}
Provider: {{ ripe.holder }}
{% endif %} {% if ripe.prefix %}
Prefisso: {{ ripe.prefix }}
{% endif %} {% if ripe.asns %}
ASN: {{ ripe.asns | join(', ') }}
{% endif %}
Dati ottenuti tramite RIPEstat Data API.
{% else %}
Informazioni RIPE
Non è stato possibile recuperare i dettagli RIPE per questo indirizzo.
{% endif %}
""" RIPESTAT_BASE = "https://stat.ripe.net/data" def get_client_ip(): xff = request.headers.get("X-Forwarded-For", "") if xff: parts = [p.strip() for p in xff.split(",") if p.strip()] if parts: return parts[0] xri = request.headers.get("X-Real-IP") if xri: return xri.strip() return request.remote_addr or "Sconosciuto" def fetch_ripe_info(ip: str): try: ni_resp = requests.get(f"{RIPESTAT_BASE}/network-info/data.json", params={"resource": ip}, timeout=2) ni_resp.raise_for_status() ni_data = ni_resp.json().get("data", {}) prefix = ni_data.get("prefix") asns = ni_data.get("asns") or [] holder = None if asns: first_asn = asns[0] ao_resp = requests.get(f"{RIPESTAT_BASE}/as-overview/data.json", params={"resource": first_asn}, timeout=2) ao_resp.raise_for_status() holder = ao_resp.json().get("data", {}).get("holder") class R: pass r = R() r.prefix = prefix r.asns = [f"AS{x}" for x in asns] if asns else [] r.holder = holder return r if any([r.prefix, r.asns, r.holder]) else None except: return None @app.route("/") def index(): ip = get_client_ip() ripe = fetch_ripe_info(ip) if ip != "Sconosciuto" else None return render_template_string(HTML_TEMPLATE, ip=ip, ripe=ripe, show_logo=True) if __name__ == "__main__": app.run(host="0.0.0.0", port=8000)