import gradio as gr import subprocess import os import time import requests def uji_warp_via_rotator(tipe_proxy, host, port, user, password): log = [] log.append("==========================================") log.append(f"[*] MEMULAI EKSPERIMEN: WARP -> ROTATOR {host}") log.append("==========================================") # 1. Bersihkan file lama for f in ["proxychains.conf", "wgcf-account.toml", "wgcf-profile.conf", "wireproxy.conf"]: if os.path.exists(f): os.remove(f) # 2. Merakit proxychains.conf dengan proxy Dataheaven Anda tipe = "socks5" if tipe_proxy == "SOCKS5" else "http" auth = f"{user} {password}" if user and password else "" conf_str = f"""strict_chain proxy_dns remote_dns_subnet 224 tcp_read_time_out 15000 tcp_connect_time_out 8000 [ProxyList] {tipe} {host} {port} {auth} """ with open("proxychains.conf", "w") as f: f.write(conf_str) log.append(f"[*] Proxychains Siap! Jalur: VPS HF -> {tipe.upper()} {host}:{port} -> Cloudflare") # 3. Mendaftar ke Cloudflare log.append("[*] Meminta konfigurasi WARP ke Cloudflare...") subprocess.run(["wgcf", "register", "--accept-tos"], capture_output=True) subprocess.run(["wgcf", "generate"], capture_output=True) if not os.path.exists("wgcf-profile.conf"): log.append("[-] GAGAL: Terkena Rate Limit Cloudflare (Atau Rotator gagal tembus).") return "\n".join(log) # 4. Set local port untuk bot Python with open("wgcf-profile.conf", "r") as f: warp_conf = f.read() with open("wireproxy.conf", "w") as f: f.write(warp_conf) f.write("\n[Socks5]\nBindAddress = 127.0.0.1:10888\n") # 5. MENJALANKAN EKSPERIMEN log.append("[*] Mengeksekusi WARP (UDP) dibungkus menembus Rotator Dataheaven...") process = subprocess.Popen( ["proxychains4", "-f", "proxychains.conf", "wireproxy", "-c", "wireproxy.conf"], stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True ) log.append("[*] Menunggu 15 detik agar terowongan Handshake terbentuk...") time.sleep(15) # 6. Test Koneksi Bot log.append("[*] Bot Python mencoba menembus koneksi...") proxies = { "http": "socks5://127.0.0.1:10888", "https": "socks5://127.0.0.1:10888" } try: # Tembak IP Checker res = requests.get("https://api.ipify.org?format=json", proxies=proxies, timeout=15) log.append("\n[+++] HASIL EKSPERIMEN: BERHASIL SANGAT SEMPURNA! [+++]") log.append(f" IP Keluar Anda: {res.json()['ip']}") log.append(" Teori Anda terbukti bisa diimplementasikan!") except Exception as e: log.append("\n[---] HASIL EKSPERIMEN: GAGAL / TIMEOUT [---]") log.append(f" Error Bot: {str(e)}") log.append("\n[!] KESIMPULAN TEKNIS:") log.append(" Ini membuktikan bahwa Rotator Proxy Dataheaven memblokir/mengabaikan") log.append(" paket UDP yang dibutuhkan oleh protokol WireGuard Cloudflare.") # Ambil log asli dari terminal proxychains process.terminate() out, err = process.communicate() log.append("\n--- Log Asli Terminal Proxychains ---") log.append(err[-600:] if err else "Tidak ada output error spesifik dari proxychains.") if process.poll() is None: process.terminate() return "\n".join(log) with gr.Blocks(title="Lab Uji Coba: WARP via Rotator") as demo: gr.Markdown("# ๐Ÿงช Lab Uji Coba: WARP via Proxy Dataheaven") gr.Markdown("Kredensial sudah terisi otomatis. Langsung klik eksekusi untuk membuktikan!") with gr.Row(): tipe = gr.Radio(["SOCKS5", "HTTP"], label="Tipe Proxy", value="SOCKS5") host = gr.Textbox(label="IP / Host Rotator", value="edge1-us.dataheaven.ai") port = gr.Textbox(label="Port Rotator", value="8888") with gr.Row(): user = gr.Textbox(label="Username Proxy", value="oy9jb-id") pwd = gr.Textbox(label="Password Proxy", value="e8ij1r8u", type="password") btn = gr.Button("๐Ÿš€ Eksekusi Uji Coba Sekarang!", variant="primary") layar_log = gr.Textbox(label="Terminal Hasil Eksperimen", lines=25) # PERBAIKAN: Menambahkan api_name=False agar Gradio tidak mengirim array kosong btn.click( fn=uji_warp_via_rotator, inputs=[tipe, host, port, user, pwd], outputs=layar_log, api_name=False ) demo.launch(server_name="0.0.0.0", server_port=7860)