File size: 4,527 Bytes
2aff7d4
57e405d
 
2aff7d4
57e405d
2aff7d4
57e405d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2aff7d4
57e405d
 
 
 
 
 
 
 
 
 
 
 
 
 
2aff7d4
57e405d
 
 
 
 
 
 
 
 
 
 
2aff7d4
f4a6240
 
 
 
 
 
 
2aff7d4
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
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)