CCCPaste

TZX TEAM SERVER

from fastapi import FastAPI, Request, Depends, HTTPException, status
from fastapi.responses import HTMLResponse
from fastapi.security import HTTPBasic, HTTPBasicCredentials
import uvicorn
import asyncio
import socket
import threading
import logging
from rich.console import Console
from rich.panel import Panel
import struct
import select
import secrets

# إعداد تسجيل الأخطاء
logging.basicConfig(
    filename='socks5.log',
    level=logging.INFO,
    format='%(asctime)s - %(levelname)s - %(message)s'
)
console = Console()

app = FastAPI(title="TzX Team SOCKS5 Server")

# إعداد المصادقة الأساسية
security = HTTPBasic()
USERNAME = "admin"  # يمكنك تغييره
PASSWORD = "TzX2999"  # يمكنك تغييره

# التحقق من اسم المستخدم وكلمة المرور
def verify_credentials(credentials: HTTPBasicCredentials = Depends(security)):
    correct_username = secrets.compare_digest(credentials.username, USERNAME)
    correct_password = secrets.compare_digest(credentials.password, PASSWORD)
    if not (correct_username and correct_password):
        raise HTTPException(
            status_code=status.HTTP_401_UNAUTHORIZED,
            detail="اسم المستخدم أو كلمة المرور غير صحيحة",
            headers={"WWW-Authenticate": "Basic"},
        )
    return credentials.username

# حالة الخادوم
server_running = False
server_thread = None
server_instance = None

# HTML للواجهة الفاخرة
html_content = """



    
    
    TzX Team - Future Coding 2999
    
    


    
SOCKS5 Server: Stopped

الأوامر:

  • الاتصال بالخادوم: استخدم عميل SOCKS5 على 127.0.0.1:1081
  • إعداد العميل: ضبط البروكسي على SOCKS5 مع العنوان 127.0.0.1 والمنفذ 1081
  • مراقبة السجلات: تحقق من ملف socks5.log لتتبع الاتصالات
  • إيقاف الخادوم: اضغط على زر "إيقاف الخادوم" أو Ctrl+C في الطرفية
""" class SOCKS5Server: def __init__(self, host='127.0.0.1', port=1081, max_connections=100): self.host = host self.port = port self.max_connections = max_connections self.server_socket = None self.running = False def setup_socket(self): self.server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) self.server_socket.bind((self.host, self.port)) self.server_socket.listen(self.max_connections) console.print(Panel(f"SOCKS5 Server started on {self.host}:{self.port} | TzX Team", style="bold cyan")) async def handle_auth(self, client_socket, addr): try: loop = asyncio.get_running_loop() data = await loop.sock_recv(client_socket, 1024) if not data or data[0] != 0x05: return False nmethods = data[1] methods = data[2:2 + nmethods] if 0x00 not in methods: await loop.sock_sendall(client_socket, b'\x05\xff') return False await loop.sock_sendall(client_socket, b'\x05\x00') return True except Exception as e: logging.error(f"Client {addr}: Auth error - {e}") return False async def handle_request(self, client_socket, addr): try: loop = asyncio.get_running_loop() data = await loop.sock_recv(client_socket, 1024) if not data or data[0] != 0x05: return False cmd, _, atype = data[1:4] if cmd != 0x01: await loop.sock_sendall(client_socket, b'\x05\x07\x00\x01\x00\x00\x00\x00\x00\x00') return False if atype == 0x01: # IPv4 dest_addr = socket.inet_ntoa(data[4:8]) dest_port = struct.unpack('>H', data[8:10])[0] elif atype == 0x03: # Domain name addr_len = data[4] dest_addr = data[5:5 + addr_len].decode() dest_port = struct.unpack('>H', data[5 + addr_len:7 + addr_len])[0] else: await loop.sock_sendall(client_socket, b'\x05\x08\x00\x01\x00\x00\x00\x00\x00\x00') return False target_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) try: target_socket.connect((dest_addr, dest_port)) await loop.sock_sendall(client_socket, b'\x05\x00\x00\x01' + socket.inet_aton('0.0.0.0') + b'\x00\x00') return target_socket except Exception as e: await loop.sock_sendall(client_socket, b'\x05\x04\x00\x01\x00\x00\x00\x00\x00\x00') logging.error(f"Client {addr}: Connection to {dest_addr}:{dest_port} failed - {e}") return False except Exception as e: logging.error(f"Client {addr}: Request error - {e}") return False async def relay_data(self, client_socket, target_socket, addr): try: loop = asyncio.get_running_loop() while True: r, _, _ = await loop.run_in_executor(None, select.select, [client_socket, target_socket], [], []) if client_socket in r: data = await loop.sock_recv(client_socket, 4096) if not data: break await loop.sock_sendall(target_socket, data) if target_socket in r: data = await loop.sock_recv(target_socket, 4096) if not data: break await loop.sock_sendall(client_socket, data) except Exception as e: logging.error(f"Client {addr}: Relay error - {e}") finally: client_socket.close() target_socket.close() async def handle_client(self, client_socket, addr): try: if not await self.handle_auth(client_socket, addr): return target_socket = await self.handle_request(client_socket, addr) if target_socket: console.print(f"[green]Client {addr}: Connected to target | TzX Team[/green]") await self.relay_data(client_socket, target_socket, addr) else: console.print(f"[red]Client {addr}: Connection failed | TzX Team[/red]") except Exception as e: logging.error(f"Client {addr}: General error - {e}") finally: client_socket.close() async def accept_connections(self): loop = asyncio.get_running_loop() while self.running: try: client_socket, addr = await loop.sock_accept(self.server_socket) loop.create_task(self.handle_client(client_socket, addr)) except Exception as e: if self.running: logging.error(f"Accept error: {e}") def start(self): if not self.running: self.running = True self.setup_socket() asyncio.run(self.accept_connections()) def stop(self): if self.running: self.running = False if self.server_socket: self.server_socket.close() console.print("[yellow]SOCKS5 Server stopped | TzX Team[/yellow]") @app.get("/", response_class=HTMLResponse) async def root(username: str = Depends(verify_credentials)): return HTMLResponse(content=html_content) @app.post("/start_server") async def start_server(username: str = Depends(verify_credentials)): global server_running, server_thread, server_instance if not server_running: server_instance = SOCKS5Server() server_thread = threading.Thread(target=server_instance.start, daemon=True) server_thread.start() server_running = True return {"message": "SOCKS5 Server: Running | Port: 1081"} return {"message": "SOCKS5 Server: Already Running"} @app.post("/stop_server") async def stop_server(username: str = Depends(verify_credentials)): global server_running, server_thread, server_instance if server_running: server_instance.stop() server_running = False server_thread = None server_instance = None return {"message": "SOCKS5 Server: Stopped"} return {"message": "SOCKS5 Server: Already Stopped"} if __name__ == "__main__": uvicorn.run(app, host="127.0.0.1", port=1080, log_level="error")