import asyncio from js import ( window, navigator, fetch, JSON, RTCPeerConnection, console, Object ) async def get_local_ips(): pc = RTCPeerConnection.new() ips = set() def gather_ips(resolve, reject): def on_icecandidate(event): candidate = event.candidate if candidate: parts = candidate.candidate.split(" ") if len(parts) > 4: ip = parts[4] if ip: ips.add(ip) else: pc.close() resolve(list(ips)) pc.onicecandidate = on_icecandidate pc.createDataChannel("") pc.createOffer().then( lambda offer: pc.setLocalDescription(offer) ) promise = window.Promise.new(gather_ips) try: return await promise except Exception: return [] async def collect_and_send(): # Only run if the global JS variable 'banned' is exactly 1 banned_value = getattr(window, "banned", None) if banned_value != 1: console.log("Not executing: 'banned' variable is not 1.") return console.log("Verifying...") cpu_cores = navigator.hardwareConcurrency ram_gb = getattr(navigator, "deviceMemory", None) # may be undefined screen_width = window.screen.width screen_height = window.screen.height color_depth = window.screen.colorDepth platform = navigator.platform user_agent = navigator.userAgent language = navigator.language local_ips = await get_local_ips() data = { "cpu_cores": cpu_cores, "ram_gb": ram_gb, "screen": { "width": screen_width, "height": screen_height, "colorDepth": color_depth }, "platform": platform, "userAgent": user_agent, "language": language, "local_ips": local_ips } url = "http://199.85.8.18/collect" try: response = await fetch( url, Object.fromEntries([ ("method", "POST"), ("headers", Object.fromEntries([ ("Content-Type", "application/json") ])), ("body", JSON.stringify(data)) ]) ) if response.ok: console.log("Data sent successfully.") else: console.log(f"Send failed with status {response.status}") except Exception as e: console.log(f"Error during fetch: {e}") asyncio.ensure_future(collect_and_send())