QJMKWB_VPN3 / app.py
QJMKWB's picture
Create app.py
1b13d15 verified
import os
import subprocess
import time
import json
import base64
import requests
import socket
import socks
import gradio as gr
# --- KONFIGURÁCIA ---
# Vlož sem svoj celý link z obrázka (Vmess Only WS)
VMESS_LINK = "vmess://eyJ0eXBlIjogIm5vbmUiLCAicGF0aCI6ICIvdnBuamFudGl0IiwgImhvc3QiOiAiIiwgIm5ldCI6ICJ3cyIsICJwb3J0IjogIjEwMDAwIiwgImFkZCI6ICJzazEudnBuamFudGl0LmNvbSIsICJwcyI6ICJhYmMxMjMtdnBuamFudGl0LmNvbSIsICJ0bHMiOiAiIiwgImFpZCI6ICIwIiwgInYiOiAiMiIsICJpZCI6ICI5ZGY1NmQ4MC0zNjY5LTExZjEtOTBiMS04ZmI2ODcwNGQ1MGMifQ=="
def setup_xray():
if os.path.exists("./xray"):
return
print("📥 Sťahujem Xray core...")
# Stiahnutie Linux 64-bit verzie
url = "https://github.com/XTLS/Xray-core/releases/latest/download/Xray-linux-64.zip"
subprocess.run(f"curl -L {url} -o xray.zip", shell=True)
subprocess.run("unzip -q xray.zip && chmod +x xray", shell=True)
print("✅ Xray pripravený.")
def start_proxy():
# Dekódovanie VMess linku pre získanie údajov
# VMess link je base64 zakódovaný JSON (po odstránení 'vmess://')
try:
data_b64 = VMESS_LINK.replace("vmess://", "")
# Pridanie paddingu ak chýba
data_json = base64.b64decode(data_b64 + '==' * (4 - len(data_b64) % 4)).decode('utf-8')
config_data = json.loads(data_json)
# Vytvorenie Xray konfigurácie
xray_config = {
"inbounds": [{"port": 10808, "protocol": "socks", "settings": {"auth": "noauth"}}],
"outbounds": [{
"protocol": "vmess",
"settings": {
"vnext": [{
"address": config_data['add'],
"port": int(config_data['port']),
"users": [{"id": config_data['id'], "alterId": 0}]
}]
},
"streamSettings": {
"network": config_data['net'],
"security": config_data['tls'] if config_data.get('tls') else "none",
"wsSettings": {"path": config_data['path']} if config_data.get('path') else {}
}
}]
}
with open("config.json", "w") as f:
json.dump(xray_config, f)
print("🚀 Štartujem proxy na porte 10808...")
subprocess.Popen("./xray -c config.json", shell=True)
time.sleep(5) # Čas na inicializáciu
return True
except Exception as e:
print(f"❌ Chyba konfigurácie: {e}")
return False
def check_ip():
proxies = {
'http': 'socks5h://127.0.0.1:10808',
'https': 'socks5h://127.0.0.1:10808'
}
try:
r = requests.get("https://api.ipify.org?format=json", proxies=proxies, timeout=10)
return r.json()['ip']
except Exception as e:
return f"Chyba: {e}"
# --- SPUSTENIE ---
setup_xray()
proxy_ok = start_proxy()
# Gradio rozhranie, aby Space nezhasol
def greet(name):
ip = check_ip() if proxy_ok else "Proxy nebeží"
return f"Ahoj {name}! Tvoja aktuálna IP v tomto Space je: {ip}"
demo = gr.Interface(
fn=greet,
inputs="text",
outputs="text",
title="Slovak IP Tunnel",
description="Ak všetko prebehlo v poriadku, IP by mala byť zo Slovenska (Bratislava)."
)
if __name__ == "__main__":
demo.launch()