| 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("==========================================") |
|
|
| |
| for f in ["proxychains.conf", "wgcf-account.toml", "wgcf-profile.conf", "wireproxy.conf"]: |
| if os.path.exists(f): |
| os.remove(f) |
|
|
| |
| 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") |
|
|
| |
| 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) |
|
|
| |
| 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") |
|
|
| |
| 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) |
|
|
| |
| log.append("[*] Bot Python mencoba menembus koneksi...") |
| proxies = { |
| "http": "socks5://127.0.0.1:10888", |
| "https": "socks5://127.0.0.1:10888" |
| } |
|
|
| try: |
| |
| 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.") |
| |
| |
| 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) |
| |
| |
| 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) |