#!/bin/bash # Script para gestionar el proxy TCP de forma dinámica # Uso: ./manage_proxy.sh [comando] [argumentos] PROXY_URL="http://localhost:8080" show_help() { echo "Uso: $0 [comando] [argumentos]" echo "" echo "Comandos disponibles:" echo " status - Mostrar estado de todos los proxies" echo " add - Añadir nuevo proxy" echo " remove - Eliminar proxy existente" echo " logs - Mostrar logs del contenedor" echo " restart - Reiniciar el contenedor" echo " build - Construir la imagen del contenedor" echo " start - Iniciar el contenedor" echo " stop - Detener el contenedor" echo "" echo "Ejemplos:" echo " $0 status" echo " $0 add 9000 9000" echo " $0 remove 9000" } check_container() { if ! docker ps | grep -q "tcp-proxy-container"; then echo "Error: El contenedor tcp-proxy no está ejecutándose" echo "Ejecuta: $0 start" exit 1 fi } get_status() { check_container echo "Estado de los proxies TCP:" curl -s "$PROXY_URL/status" | python3 -m json.tool 2>/dev/null || echo "Error obteniendo estado" } add_proxy() { local local_port=$1 local remote_port=$2 if [[ -z "$local_port" || -z "$remote_port" ]]; then echo "Error: Debes especificar puerto local y remoto" echo "Uso: $0 add " exit 1 fi check_container echo "Añadiendo proxy: localhost:$local_port -> 91.99.210.72:$remote_port" response=$(curl -s -X POST "$PROXY_URL/add" \ -H "Content-Type: application/json" \ -d "{\"local_port\": $local_port, \"remote_port\": $remote_port}") echo "$response" | python3 -m json.tool 2>/dev/null || echo "Respuesta: $response" # Verificar si necesitamos exponer el puerto en docker-compose if ! grep -q "$local_port:$local_port" docker-compose.yml; then echo "" echo "⚠️ IMPORTANTE: Agrega la siguiente línea en docker-compose.yml bajo 'ports':" echo " - \"$local_port:$local_port\"" echo " Luego ejecuta: $0 restart" fi } remove_proxy() { local local_port=$1 if [[ -z "$local_port" ]]; then echo "Error: Debes especificar el puerto local" echo "Uso: $0 remove " exit 1 fi check_container echo "Eliminando proxy del puerto $local_port" response=$(curl -s -X POST "$PROXY_URL/remove" \ -H "Content-Type: application/json" \ -d "{\"local_port\": $local_port}") echo "$response" | python3 -m json.tool 2>/dev/null || echo "Respuesta: $response" } show_logs() { echo "Logs del contenedor tcp-proxy:" docker logs -f tcp-proxy-container } restart_container() { echo "Reiniciando contenedor..." docker-compose down docker-compose up -d echo "Contenedor reiniciado" } build_container() { echo "Construyendo imagen del contenedor..." docker-compose build echo "Imagen construida" } start_container() { echo "Iniciando contenedor..." docker-compose up -d echo "Contenedor iniciado" # Esperar a que el servicio esté listo echo "Esperando a que el servicio esté listo..." for i in {1..30}; do if curl -s "$PROXY_URL/status" >/dev/null 2>&1; then echo "✅ Servicio listo" break fi sleep 1 echo -n "." done echo "" } stop_container() { echo "Deteniendo contenedor..." docker-compose down echo "Contenedor detenido" } # Verificar argumentos if [[ $# -eq 0 ]]; then show_help exit 1 fi # Procesar comandos case "$1" in "status") get_status ;; "add") add_proxy "$2" "$3" ;; "remove") remove_proxy "$2" ;; "logs") show_logs ;; "restart") restart_container ;; "build") build_container ;; "start") start_container ;; "stop") stop_container ;; "help"|"-h"|"--help") show_help ;; *) echo "Comando desconocido: $1" show_help exit 1 ;; esac